静的コンテキストのときにPHPでマジック定数(__DIR__
など)を使用することを拒否する特別な理由はありますか?静的コンテキストでマジック定数を使用できないのはなぜですか?
class MyClass
{
protected static $options = array(
'key1' => 2,
'key2' => __DIR__ .'/mypic.png' // Triggers a syntax error
);
public function __construct() {}
}
EDIT質問について明確化:OOP POVは__DIR__
が特定のインスタンスではないという「グローバル」であるため、何も間違っていないようです。私は「なぜ」それが不可能であることに興味があります。例えば、静的なものについて言えば、誰もがこれが不可能であることを知っている:
public static function getName() { return $this->name; }
静的関数が「知らない」のでgetName()
はどのようなインスタンスを参照するために複数のインスタンス間で共有され、$this->name
はどんな意味がないので、 。
ありがとう、本当に知っていますが、実際には実際の質問には答えられません。そのため、「物理的に」とは言えません。 – gremo
おそらく、initの値はコンパイル時に決定されます(つまり、PHPはZendエンジンのオペコードにコンパイルされます)。実行時ではありません。 –
@Gremo私の追加を参照してください。このマニュアルでは理由として明示的に述べられていませんが、コンパイル時に実行時ではなく静的プロパティが解決されるためです。 –