静的データへのアクセス

バージョン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のオートコンプリートを「手元」オブジェクトとともに使用します。

Source: https://habr.com/ru/post/J140616/


All Articles