我发现了有关 PHP 中静态变量的不同信息,但没有任何信息能够真正解释它是什么以及它是如何工作的。
我读过,在类中使用静态属性时,该类实例化的任何对象都不能使用静态属性,而该类实例化的对象可以使用静态方法吗?
但是,我一直在尝试研究静态变量在不在类中的函数中的作用。另外,函数中的静态变量的工作方式是否有点像 javascript 中的闭包,还是我完全不同意这个假设?
我读过,当在类中使用时,静态属性不能被该类实例化的任何对象使用
这取决于你的意思。例如:
class Foo {
static $my_var = 'Foo';
}
$x = new Foo();
echo $x::$my_var; // works fine
echo $x->my_var; // doesn't work - Notice: Undefined property: Foo::$my_var
并且静态方法可以由类实例化的对象使用???
是的,属于该类的实例化对象可以访问静态方法。
关键词static
在类的上下文中,其行为有点像其他语言中的静态类变量。声明的成员(方法或变量)static
与类相关联,而不是与该类的实例相关联。因此,您可以在没有类实例的情况下访问它(例如:在上面的示例中,我可以使用Foo::$my_var
)
但是,我一直在尝试研究静态变量在不在类中的函数中的作用。
另外,函数中的静态变量的工作方式是否有点像 javascript 中的闭包,或者我完全不同意这个假设。
在类之外(即:在函数中),static
变量是函数退出时不会丢失其值的变量。所以从某种意义上说,是的,它们的工作方式就像 JavaScript 中的闭包。
但与 JS 闭包不同的是,在同一函数的不同调用中,变量只有一个值。来自 PHP 手册的示例:
function test()
{
static $a = 0;
echo $a;
$a++;
}
test(); // prints 0
test(); // prints 1
test(); // prints 2
参考:static
关键词(在课堂上) http://php.net/manual/en/language.oop5.static.php, (在函数中) http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)