在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'的風暴評論。我很清楚這種語言的特點。我只想知道,除了「它只是以這種方式增長」以外,是否有這個原因。
有兩個核心限制:1)PHP使用單通編譯而不是AST,2)PHP對函數和變量使用不同的符號。 ($ this-> foo()是一個函數調用還是一個名爲封閉函數foo的實例變量?)這些限制通常在OO模型中感受到,因爲它在PHP的生命中稍後出現。 – Matthew 2013-02-11 14:50:06
任何人都知道如果$ otherClass是靜態的,該怎麼辦? – Dan 2014-08-25 03:42:12