この記事では、一定の参考値を持つ [php クラスとオブジェクト] 後期静的バインディングの内容を紹介します。必要な友達はそれを参照してください
後期静的バインディング
PHP 5.3.0
。用途: 継承スコープ内の静的に呼び出されたクラスの参照
動作原理:
前の「非転送呼び出し」のクラス名を保存します。
静的メソッド呼び出しを行う場合、クラス名は明示的に指定されたものです (通常は :: 演算子の左側)。オブジェクトが属する種類。
呼び出しの転送: self::、parent::、static::、forward_static_call() による静的呼び出し (静的メソッドの呼び出し)。
get_called_class() 関数を使用して、呼び出されたメソッドのクラス名を取得でき、static:: はそのスコープを指します。 「遅延バインディング」とは、static:: が現在のメソッドが定義されているクラスに解析されず、実際の実行時に計算されることを意味します。
静的メソッドの呼び出しに使用できる (ただし、それに限定されない) ため、「静的バインディング」とも呼ばれます。
<?phpclass A { public static function who() { echo __CLASS__; //返回该类被定义时的名字 } public static function test() { self::who(); } }class B extends A { // public static function who() { // echo __CLASS__; // }} B::test(); //A?>
後期静的バインディングの使用法
後期静的バインディングは、実行時に最初に呼び出されるクラスを表す新しいキーワードを導入することで制限を回避することを目的としていました。 簡単に言えば、このキーワードを使用すると、上記の例で test() を呼び出すときに、クラス A の代わりにクラス B を参照できるようになります。最終的には、新しいキーワードを導入せず、すでに予約されている静的キーワードを使用することが決定されました。
Example #2 static:: 简单用法<?phpclass A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 注意使用static,后期静态绑定从这里开始 } }class B extends A { public static function who() { echo __CLASS__; } } B::test(); //B?>
非静的環境では、呼び出されるクラスはオブジェクト インスタンスが属するクラスです。 $this-> は同じスコープ内の private メソッドを呼び出そうとするため、static:: は異なる結果を返す可能性があります。
もう 1 つの違いは、static:: は静的プロパティにのみ使用できることです。 遅い静的バインディング
PHP 5.3.0
用途: 継承スコープ内の静的に呼び出されるクラスへの参照
動作原理:
以前の「非転送呼び出し」(非転送呼び出し) クラスを保存します名前。
静的メソッド呼び出しを行う場合、クラス名は明示的に指定されたものです (通常は :: 演算子の左側)。オブジェクトが属する種類。
呼び出しの転送: self::、parent::、static::、forward_static_call() による静的呼び出し (静的メソッドの呼び出し)。
get_called_class() 関数を使用して、呼び出されたメソッドのクラス名を取得でき、static:: はそのスコープを指します。「遅延バインディング」とは、static:: が現在のメソッドが定義されているクラスに解析されず、実際の実行時に計算されることを意味します。
静的メソッドの呼び出しに使用できる (ただし、それに限定されない) ため、「静的バインディング」とも呼ばれます。<?phpclass A { public static function who() { echo __CLASS__; //返回该类被定义时的名字 } public static function test() { self::who(); } }class B extends A { // public static function who() { // echo __CLASS__; // }} B::test(); //A?>
後期静的バインディングの使用法
後期静的バインディングは、実行時に最初に呼び出されるクラスを表す新しいキーワードを導入することで制限を回避することを目的としていました。
Example #2 static:: 简单用法<?phpclass A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 注意使用static,后期静态绑定从这里开始 } }class B extends A { public static function who() { echo __CLASS__; } } B::test(); //B?>
非静的環境では、呼び出されるクラスはオブジェクト インスタンスが属するクラスです。 $this-> は同じスコープ内の private メソッドを呼び出そうとするため、static:: は異なる結果を返す可能性があります。 もう 1 つの違いは、static:: は静的プロパティにのみ使用できることです。
関連する推奨事項:【phpクラスとオブジェクト】型制約
以上が[php クラスとオブジェクト] 遅延静的バインディングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。