以下のコードが「TEST」を2回しか出力しない理由がわかりません。
<?php
class A {
private $test = "TEST<br />";
public static function getInstance() {
return new self();
}
public static function someStaticMethod() {
$a = new self();
$a->test;
}
public function __get($args) {
echo $this->$args;
}
}
/* echo's "TEST" */
$a = new A();
$a->test;
/* echo's "TEST" */
$a2 = A::getInstance();
$a2->test;
/*
No output... eeerhm... how come?
Why is $a->test (inside someStaticMethod()) not being overloaded by __get ??
*/
A::someStaticMethod();
?>
PHPサイトは言う(リンク):
プロパティのオーバーロードは、オブジェクト コンテキストでのみ機能します。これらの魔法のメソッドは、静的コンテキストではトリガーされません。したがって、これらのメソッドは static と宣言しないでください。PHP 5.3.0 以降、魔法のオーバーロード メソッドの 1 つが static と宣言されている場合、警告が発行されます。
しかし、彼らは魔法のメソッドを静的に宣言する必要があると言っていると思います。例えば:
public static 関数 __get(){}
さらに、実際にオブジェクトコンテキストで使用しているという事実。$a = 新しい自己(); 変数 $a のクラス A からインスタンスを返します。次に、$a->test (オブジェクト コンテキスト imo?) を使用して、プライベートな「テスト」変数をフェッチし、それをオーバーロードする必要があります...
私は混乱しています...