php.net 手册无法理解 class 范围解析运算符 ::

php.net manual not make sense of class Scope Resolution Operator ::

尝试学习 php 并遇到了另一个障碍

好的,这就是他们在下面 php.net 上所说的关于 ::

范围解析运算符(也称为 Paamayim Nekudotayim)或更简单的术语,即双冒号,是一个允许访问 class 的静态、常量和重写属性或方法的标记。

从 PHP 5.3.0 开始,可以使用变量引用 class。变量的值不能是关键字(例如 self、parent 和 static)。

从 class 定义之外引用这些项目时,使用 class 的名称。

class MyClass {
    const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass'; 

echo $classname::CONST_VALUE;  

echo MyClass::CONST_VALUE;
?>

现在回到上面的代码

$classname = 'MyClass';

这是一个变量!被赋予 'STRING' 价值 'MyClass'!

echo $classname::CONST_VALUE; 

这条线怎么可能!与此无关 CLASS!

这基本上是一个带有字符串变量的简单变量! 那么它如何神奇地获得访问 CLASS 常数的能力 ::? 我看到的唯一类似的是字符串 'MyClass' 但理论上没有权力让它发生它只是一个字符串。

有人可以解释一下吗,因为我每天遇到 100 个障碍,我开始认为 php 只是编造出来的,因为其中有太多自相矛盾的东西。

在这种情况下,这两行基本相同。

echo $classname::CONST_VALUE;  

echo MyClass::CONST_VALUE;

PHP 尝试 "cast" 字符串 "MyClass" 到 Class。如果 class 存在,那么一切都很好。

其他示例可以是:

$instance = new $classname;

其中 $instanceMyClass 的有效实例。

换句话说,您可以用字符串表示形式替换 class 名称。