为什么" - >"无法访问静态属性,但可以通过"::"访问?

Bes*_*ame 5 php

这是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在此工作?谢谢大家!

Kub*_*bo2 1

A ::(双冒号,或T_PAAMAYIM_NEKUDOTAYIMPHP 解析器这样称呼它)被称为范围解析运算符是有原因的。它解决了对对象引用上的静态属性的访问。

这在 PHP 7 之前似乎是不可能的,但是发布了 RFC 来解决该行为,并随后在该语言中实现。PHP 文档有时更新和包含新功能的速度可能很慢,因此会产生误导,除非您也遵循wiki.php.net 上的 RFC 流程