php - 为什么静态属性不能被 "->"访问但可以被 "::"访问?

标签 php

这是来自 static 关键字 PHP.net 的文档:

A property declared as static cannot be accessed with an instantiated class object (though a static method can).

那么为什么下面的代码有效呢?

这是他们的示例代码(我已经缩短了):

<?php
class Foo
{
public static $my_static = 'foo';
}
$foo= new Foo();
print $foo::$my_static; //print 'foo'
?>

为什么 $foo::$my_static 在这里仍然有效?谢谢大家!

最佳答案

A ::(双冒号,或 T_PAAMAYIM_NEKUDOTAYIM,如 PHP 解析器所称)被称为作用域解析运算符是有原因的。 它解决了对对象引用的静态属性的访问。

这在 PHP 7 之前似乎是不可能的,however an RFC was issued to address the behavior然后在语言中实现。 PHP 文档有时更新和包含新功能的速度很慢,因此会产生误导,除非您也关注 the RFC process at wiki.php.net。 .

关于php - 为什么静态属性不能被 "->"访问但可以被 "::"访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656898/

相关文章:

php - 操作方法 : Optimize Symfony's forms' performance?

php - Laravel 4 急切加载 - 所有关系都被推到第一个返回的对象

php - 在 PHP 中获取 SSL 证书的签名

php - 仅当整数时获取查询字符串

php - 使用 laravel 5.1 文件系统时如何将 s3 对象字符串变成有用的东西

php - 填写个人资料页面的最佳方法?

java - 通过质询/响应保护 session 的每个请求?

php - 注册表检查两个密码是否匹配

php - PHP MySQL 上的多个条目

arrays - PHP - 在数组中的第 70 个变量后丢失