这是static关键字PHP.net 的文档:
声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以).
那么为什么以下代码有效呢?
这是他们的示例代码(我缩短了它):
<?php
class Foo
{
public static $my_static = 'foo';
}
$foo= new Foo();
print $foo::$my_static; //print 'foo'
?>
Run Code Online (Sandbox Code Playgroud)
为何$foo::$my_static still在此工作?谢谢大家!
A ::(双冒号,或T_PAAMAYIM_NEKUDOTAYIMPHP 解析器这样称呼它)被称为范围解析运算符是有原因的。它解决了对对象引用上的静态属性的访问。
这在 PHP 7 之前似乎是不可能的,但是发布了 RFC 来解决该行为,并随后在该语言中实现。PHP 文档有时更新和包含新功能的速度可能很慢,因此会产生误导,除非您也遵循wiki.php.net 上的 RFC 流程。