方法中的静态变量不会在未设置的实例上重置

时间:2015-09-30 08:51:35

标签: php oop testing static static-variables

PHP 5.6.12-arm和PHP 7 RC3中的有趣行为(虽然我想它在所有版本中都是这样,但我只是想记下我用来测试的版本):

示例 - 在类方法

中使用静态变量
<?php
class Foo {
    public function Bar() {
        static $var = 0;

        return ++$var;
    }
}

$Foo_instance = new Foo;

print $Foo_instance->Bar(); // prints 1
print PHP_EOL;

unset($Foo_instance);

$Foo_instance2 = new Foo;

print $Foo_instance2->Bar(); // prints 2 - but why?
print PHP_EOL;
?>

问题:2如何打印,因为我们在再次调用Foo-&gt; Bar()之前取消了整个实例?

请注意,this问题及其答案无法回答我的问题。

最好的问候。

1 个答案:

答案 0 :(得分:1)

您可以查看variables scope

的php文档
  

如果在函数内部将变量声明为静态,则它是静态的   整个类及其所有实例,而不是每个对象。

因此,静态变量与单个实例无关。