Có vẻ như không ai đề cập đến cho đến nay, rằng các biến tĩnh bên trong các thể hiện khác nhau của cùng một lớp vẫn giữ nguyên trạng thái của chúng. Vì vậy, hãy cẩn thận khi viết mã OOP.
Xem xét điều này:
class Foo
{
public function call()
{
static $test = 0;
$test++;
echo $test . PHP_EOL;
}
}
$a = new Foo();
$a->call(); // 1
$a->call(); // 2
$a->call(); // 3
$b = new Foo();
$b->call(); // 4
$b->call(); // 5
Nếu bạn muốn một biến static chỉ nhớ trạng thái của nó đối với cá thể lớp hiện tại, bạn nên gắn vào một thuộc tính lớp, như sau:
class Bar
{
private $test = 0;
public function call()
{
$this->test++;
echo $this->test . PHP_EOL;
}
}
$a = new Bar();
$a->call(); // 1
$a->call(); // 2
$a->call(); // 3
$b = new Bar();
$b->call(); // 1
$b->call(); // 2