PHP和静态变量在对象成员函数中 In PHP, we can define static variables in object member functions. These static variables are shared among all instances of the class and retain their values between function calls. 在PHP中,我们可以在对象成员函数中定义静态变量。这些静态变量在类的所有实例之间共享,并在函数调用之间保留其值。

17 浏览
0 Comments

PHP和静态变量在对象成员函数中 In PHP, we can define static variables in object member functions. These static variables are shared among all instances of the class and retain their values between function calls. 在PHP中,我们可以在对象成员函数中定义静态变量。这些静态变量在类的所有实例之间共享,并在函数调用之间保留其值。

直到今天,我认为自己对静态修饰符的工作原理有相当好的理解。我知道(用通俗的话说),函数中的静态变量在对该函数的调用之间不会“重置”,我也知道类中的静态变量和函数可以通过调用类本身来访问(而不是类的实例化)。

我的问题是:今天我发现,如果我在一个非静态函数的类中声明一个静态变量,那么在对成员函数的不同调用中,该类的所有实例将共享该静态变量。

例如:

class A {
    public function GetValue() {
        static $value = 0;
        $value++;
        return $value;
    }
}
$instance_1 = new A();
$instance_2 = new A();
echo $instance_1->GetValue();
echo $instance_1->GetValue();
echo $instance_2->GetValue();
echo $instance_2->GetValue();
echo $instance_1->GetValue();
echo $instance_1->GetValue();

请注意,GetValue函数既没有声明为静态,也没有以静态方式使用(即,调用类本身)。

现在,我一直以为这会输出:121234

然而,我发现它会输出:123456

就像我说的,如果静态变量$value在静态函数中,我会理解这个结果。然而,由于它在非静态函数中,我只是认为它只会与每个单独的实例“绑定”在一起。

所以,我想问两个问题... 1)这是一个错误还是预期的行为?2)其他编程语言是否以相同的方式处理这些“非静态内部静态”变量,还是这只是PHP特有的?

0