5

PHPで変数が静的であるかどうかをテストすることは可能ですか?__get静的変数も調べる魔法のメソッドを作成しようとしています。property_exists()変数が静的な場合もtrueを返すことがわかりました。しかし、私は期待する::代わりに使用する必要がありますか?->

4

2 に答える 2

5

Reflectionを使用して、変数が静的であるかどうかをテストできます。

class Foo { static $bar; }
$prop = new ReflectionProperty('Foo', 'bar');
var_dump($prop->isStatic()); // TRUE

ただし、これらはオブジェクトコンテキストでのみ機能するため、マジックメソッド__getまたはで使用することはできません。マジックメソッドに関するPHPマニュアルから:__set

プロパティのオーバーロードは、オブジェクトコンテキストでのみ機能します。これらの魔法のメソッドは、静的コンテキストではトリガーされません。したがって、これらのメソッドは静的と宣言しないでください。PHP 5.3.0以降、魔法のオーバーロードメソッドの1つが静的と宣言された場合、警告が発行されます。

以下の紹介については、PHPInternalsメーリングリストのこのディスカッションも参照してください__getStatic

于 2011-07-04T08:50:58.143 に答える
0

magic __get()メソッドを使用して宣言されていない静的プロパティにアクセスできるとは思いません。PHPの致命的なエラーが発生します。少なくともバージョン5.3のPHPでは。

ClassName::$propertyNameもちろん、静的としてプロパティにアクセスしようとすると、これが結果になります。

于 2011-07-04T08:17:34.400 に答える