在 PHP 中,只要类名是有效的对象或字符串,就可以访问静态成员或函数。这大多是真的。当类名字符串是对象的属性时,不能直接使用。它必须先复制到一个简单的变量中,然后才能用于访问静态成员。这是一个例子:
class Foo {
protected $otherclass='Bar'; //string!
function out(){
$class=$this->otherclass;
echo $class::ALIAS; //Where everyone knows your name.
}
function noout_err(){
echo $this->otherclass::ALIAS; //syntax error, unexpected '::'
}
}
class Bar {
const ALIAS='Where everyone knows your name.'
}
这个怪癖困扰了我一段时间。所以我一直在想:
- 这是 OOP 语言之间的常见限制吗?
- 熟悉 PHP 内部原理的人可以解释为什么
$this->classname::somefunction()
不合意的语法吗?
这并不是要引起“因为 php sux”评论的风暴。我很清楚这种语言的特点。我只是想知道除了“它只是那样成长”之外,是否还有其他原因。