ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクト指向における遅延静的バインディングの詳細な説明

PHPオブジェクト指向における遅延静的バインディングの詳細な説明

藏色散人
藏色散人転載
2021-01-18 14:57:143071ブラウズ

推奨: 「PHP ビデオ チュートリアル

はじめに

PHP 5.3.0 以降、PHP には という機能が追加されました。遅延静的バインディングの機能は、継承スコープ内で静的に呼び出されるクラスを参照するために使用されます。

正確に言うと、遅延静的バインディングの動作原理は、前の「非転送呼び出し」(非転送呼び出し) にクラス名を格納することです。静的メソッド呼び出しを行う場合、クラス名は明示的に指定されたもの (通常は :: 演算子の左側) であり、非静的メソッド呼び出しを行う場合は、オブジェクトが属するクラスです。いわゆる「転送呼び出し」とは、self::parent::static:: および のような静的呼び出しを指します。 forward_static_call()get_called_class() 関数を使用すると、呼び出されたメソッドのクラス名を取得でき、static:: はそのスコープを示します。

転送された呼び出しと転送されていない呼び出し

転送された呼び出し

いわゆる転送された呼び出しとは、次のことを指します。 メソッド呼び出しクラス内 呼び出しの転送情報(コールスタック情報として理解できる)

  • 呼び出しの転送のタイミング

    • 親call

    • 自己呼び出し

    • 静的呼び出し

    • forward_static_call()

      非転送呼び出し

      いわゆる非転送呼び出しとは、静的呼び出しまたはオブジェクト (擬似オブジェクト) インスタンスを介した呼び出しを明示的に指定するクラス名を指します

      コード分析

      <?phpclass A{public static function foo(){
        static::who();}public static function who(){
        echo __CLASS__ . "\n";}}class B extends A{public static function test(){
        //非转发调用
        A::foo();
        //转发调用
        parent::foo();
        //转发调用
        self::foo();}public static function who(){
        echo __CLASS__ . "\n";}}class C extends B{public static function who(){
        echo __CLASS__ . "\n";}}//非转发调用C::test();

      遅延静的バインディング

      この関数は、言語内部の観点から「遅延静的バインディング」と呼ばれています。 「遅延バインディング」とは、static:: が現在のメソッドが定義されているクラスに解決されず、実際の実行時に計算されることを意味します。静的メソッドの呼び出し (ただし、それに限定されない) に使用できるため、「静的バインディング」とも呼ばれます。

      遅延静的バインディングの実装原理

      遅延静的バインディングの動作原理は、前の「非転送呼び出し」にクラス名を格納することです。
      この文の意味は、プログラムの実行中にどのクラスが static であるかを確認する方法です。決定ルールは、最後に保存された非転送コール クラスを取ることです。

      Later静的バインディング カスタマイズされたアプリケーション

  • #単一インスタンスの継承シナリオ

  • #抽象クラスと実装クラス

    #

以上がPHPオブジェクト指向における遅延静的バインディングの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。