PHPでは、クラスで マジックメソッド を宣言することにより、メソッド呼び出しと プロパティアクセス をオーバーロードできます。これにより、次のようなコードが有効になります。
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
PHP 5.3.0以降、インスタンスのプロパティとメソッドのオーバーロードは別として、マジックメソッド __callStatic
をオーバーライドすることにより、static
メソッド呼び出しをオーバーロードすることもできます。
利用可能な機能から目立って欠けているのは、静的プロパティをオーバーロードする機能です。次に例を示します。
echo Foo::$missingProperty; // fatal error: access to undeclared static property
この制限は明らかに 文書化 :
プロパティのオーバーロードはオブジェクトコンテキストでのみ機能します。これらの魔法のメソッドは静的なコンテキストではトリガーされません。したがって、これらのメソッドは
static
として宣言しないでください。 PHP 5.3.0以降、マジックオーバーロードメソッドの1つがstatic
として宣言されている場合、警告が発行されます。
私の質問は:
最も重要なのは、質問がそうではない「ユーザーランドのPHPに動的静的プロパティを設定するにはどうすればよいか」ということです。とはいえ、共有したい__callStatic
に基づく特にかわいい実装を知っている場合は、ぜひそうしてください。
引用 http://marc.info/?l=php-internals&m=121578194822276&w=2
静的メンバーのオーバーロードはPHP 5.3?)で追加されましたか?静的メソッドのオーバーロードが(__callStatic)であることに気付きました。これらは「静的クラス」RFCとバグレポートの一部ですが、5.3でこれらを確認できたら嬉しいです。この追加とLSBを使用すると、phpクラスは多くのことを実行できます!例:
__setStatic() __getStatic() __issetStatic() __unsetStatic()
フォローアップの引用 http://marc.info/?l=php-internals&m=121578318524848&w=2
静的クラスのRFCが受け入れられる場合、静的プロパティインターセプターは次のPHPメジャーバージョン(5.4または6の可能性があります))の一部になります。したがって、5.3にはなりません。 、しかし私たちは将来うまくいけばそれを持つでしょう。
静的クラスRFCへのリンク:
RFCのステータスは「作業中」ですが、2008年以降の場合、php.internalsメーリングリストまたはEFNetの#php.peclで質問することをお勧めしますIRCそれから何が起こったのか。