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 のため」というコメントの嵐を引き起こすことを意図したものではありません。私はその言語の特徴をよく知っています。「そのように成長した」以外に、これに理由があるかどうかを知りたいだけです。