静的データへのアクセス

バージョン5.3以降、変数を使用して静的クラスデータにアクセスできるようになりました。 これにより、「::」演算子を何らかの方法で「そうではない」使用しようとしたときに発生した、予期せぬT_PAAMAYIM_NEKUDOTAYIMエラーという構文エラーを事実上忘れていました。



しかし、私には思えるように、誰もが開いた機会について知っているわけではありません。



実験用のインターフェース、クラス、オブジェクトを作成しましょう。



interface bar{ const SOME_CONST = 'SOME_CONST'; static public function static_public_function(); } class foo implements bar{ static public $static_public_property = 'static_public_propery'; static public function static_public_function(){ return 'static_public_function'; } } $object = new foo();
      
      







5.3以前の両方で機能するコード。 オブジェクトを使用可能にした場合、そのクラスを見つける必要がありました。



 echo foo::SOME_CONST . PHP_EOL; // SOME_CONST echo foo::$static_public_property . PHP_EOL; // static_public_property echo foo::static_public_function() . PHP_EOL; // static_public_function echo bar::SOME_CONST . PHP_EOL; // SOME_CONST
      
      







PHP 5.3以降で動作するコード。 現在、クラスを指定する必要はありません。



 echo $object::$static_public_property . PHP_EOL; // static_public_property echo $object::SOME_CONST . PHP_EOL; // SOME_CONST echo $object::static_public_function() . PHP_EOL; // static_public_function
      
      







定数と静的メソッドは、PHPのインターフェイスの出現の最初からインターフェイスで宣言できます。 しかし、それらを使用するには、インターフェイスまたはクラスの名前を指定する必要がありました。 これで、オブジェクトを使用してこのデータにアクセスできます。 バージョン5.3以降、定数と静的メソッドはインターフェースの本格的な部分になったと言えます。



このため、クラス名とインターフェイスの使用回数を減らすことができます。 また、IDEのオートコンプリートを「手元」オブジェクトとともに使用します。



All Articles