イントロ
PHPでは、クラスでマジックメソッドを宣言することにより、メソッド呼び出しとプロパティアクセスをオーバーロードできます。これにより、次のようなコードが有効になります。
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
インスタンスのプロパティとメソッドのオーバーロードとは別に、PHP 5.3.0以降でstatic
は、マジックメソッドをオーバーライドすることでメソッド呼び出しをオーバーロードすることもできます__callStatic
。
何かが足りない
利用可能な機能から目立って欠けているのは、静的プロパティをオーバーロードする機能です。たとえば:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
この制限は明確に文書化されています。
プロパティのオーバーロードは、オブジェクトコンテキストでのみ機能します。これらのマジックメソッドは、静的コンテキストではトリガーされません。したがって、これらのメソッドは宣言しないでください
static
。PHP 5.3.0以降、マジックオーバーロードメソッドの1つが宣言されている場合、警告が発行されstatic
ます。
しかし、なぜ?
私の質問は:
- この機能が現在サポートされていないという技術的な理由はありますか?それとも、(震え)政治的な理由ですか?
- 過去にこの機能を追加する試みが中止されたことはありますか?
最も重要なことは、質問は「ユーザーランドPHPで動的な静的プロパティをどのように設定できますか?」ではありません。とはいえ__callStatic
、共有したいことに基づいて特にかわいい実装を知っている場合は、ぜひ共有してください。
__getStatic()
と__setStatic()
に静的なクラス、まだインスタンス化可能なクラスのためにこの機能があると便利だろう。この方向への動きを知っていますか?