Late Static Binding: "新しい自己" と "新しい静的" の分析
PHP ライブラリをバージョン 5.3 から 5.2 に移行する場合、 「return new」のようなコード スニペットに代表される、遅延静的バインディングの問題が発生します。静的($options)」。 PHP 5.2 では、このような構文は使用できません。この記事の目的は、「新しいセルフ」と「新しい静的」の間のニュアンスを調査し、「新しいセルフ」が PHP 5.2 環境で同等の機能を提供するかどうかを判断することです。
「新しいセルフ」と「新しい静的」の違い"new static"
PHP 5.2 では、"self" は "new" キーワードが明示的に宣言されているクラスを参照します。対照的に、PHP 5.3 の後期静的バインディング機能を備えた「static」は、継承階層内でメソッドが呼び出されたクラスを指します。
この違いを説明するために、次のクラス構造を考えてみましょう。
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {}
この例では、メソッド「get_self」と「get_static」がクラス A からクラス B に継承されています。B で「get_self」を呼び出すと、次のようになります。 「self」参照はメソッドが定義されているクラスにバインドされているため、クラス A のインスタンスを返します。ただし、後期静的バインディングの「static」はメソッドの呼び出し元のクラスに解決されるため、B で「get_static」を呼び出すとクラス B のインスタンスが返されます。
「new static」の適用PHP 5.2 へ
残念ながら、PHP 5.3 の「新しい」を実装するための直接的な回避策はありません。 PHP 5.2 の「静的」機能。 「return new self($options)」ステートメントは、PHP 5.3 の場合と同じ結果を生成しません。「self」は常にメソッドの呼び出し元のクラスではなく、メソッドが定義されているクラスを参照するためです。
以上がPHP 5.2 vs. 5.3: 「新しい自己」は「新しい静的」を置き換えることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。