後期静的結合(LSB)は、PHP 5.3で導入された特徴であり、静的継承の柔軟性を高めることができます。 PHPの従来の静的メソッド呼び出しでは、別の静的メソッド内から静的メソッドが呼び出されると、クラス名の解像度は実行時間ではなくコンパイル時間に行われます。これは、継承を含むシナリオで予期しない動作につながる可能性があります。
LSBは、 static
というキーワードを使用して、クラスの解像度を実行時に発生させることにより、これを変更します。 static
メソッド内でself
の代わりに使用される場合、メソッドが定義されているクラスではなく、メソッドを呼び出すときに使用されたクラスを指します。
たとえば、次のコードを検討してください。
<code class="php">class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // Here, static:: refers to the called class. } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); // Outputs: B</code>
この例では、 B::test()
を呼び出すと、 static::
は実行時に呼び出されたクラスB
に解決するためB::who()
呼び出されます。
PHPの後期静的結合と従来の多型はさまざまな目的に役立ちますが、どちらもオブジェクトまたはクラスが継承シナリオでどのように動作するかに関連しています。
PHPの従来の多型は、異なるクラスのオブジェクトを共通の基本クラスのオブジェクトとして扱うことができるオブジェクト指向プログラミングを通じて達成されます。これは通常、派生クラスの方法とオーバーライドされた方法で達成されます。オブジェクトでメソッドが呼び出されると、実行される実際のメソッドは、実行時にオブジェクトのタイプによって決定されます。
対照的に、静的結合後期は、静的な方法と静的呼び出しの解像度を特に扱います。静的方法はインスタンスではなくクラスに属しているため、従来の多型は静的な方法には適用されません。後期静的バインディングにより、ポリモーフィズムがオブジェクトメソッドでどのように機能するかと同様に、静的メソッド呼び出しを実行時に解決することができますが、静的コンテキストに限定されます。
重要な違いは、静的結合後期が静的コンテキスト内でより動的な動作を可能にすることです。これは、PHP 5.3の前に従来の静的メソッド呼び出しでは不可能でした。
後期静的結合には、以下を含むPHP開発にいくつかの実用的なアプリケーションがあります。
工場パターン:LSBは、呼び出されたクラスの新しいインスタンスを作成する必要がある工場パターンに役立ちます。 static::
を使用することにより、サブクラスであっても、正しいクラスがインスタンス化されることを確認できます。
<code class="php">class Base { public static function getInstance() { return new static(); } } class Derived extends Base {} $derivedInstance = Derived::getInstance(); // Returns an instance of Derived</code>
Singleton Patterns :Singletonパターンを実装する場合、LSBはSingletonインスタンスが正しいサブクラスであることを確認できます。
<code class="php">class Singleton { private static $instance; public static function getInstance() { if (is_null(static::$instance)) { static::$instance = new static(); } return static::$instance; } } class DerivedSingleton extends Singleton {} $derivedSingleton = DerivedSingleton::getInstance(); // Returns an instance of DerivedSingleton</code>
後期静的バインディングは、主にパフォーマンスを直接改善するのではなく、PHPコードの柔軟性と表現力を高める機能です。ただし、LSBがパフォーマンスの利点につながるシナリオがあります。
要約すると、後期静的バインド自体はPHPコードのパフォーマンスを直接改善しませんが、より効率的なコード構造とパターンにつながる可能性があり、全体的なアプリケーションのパフォーマンスを向上させる可能性があります。
以上がPHPにおける後期静的結合の概念を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。