ホームページ >バックエンド開発 >PHPチュートリアル >PHP 5.2 と PHP 5.3: `new static()` と `new self()` – 主な違いと互換性の問題は何ですか?
PHP の新しい self と新しい static: 互換性と相違点
PHP 5.3 コードを PHP 5.2 に変換すると、構文の変更による問題が発生することがよくあります。このような課題の 1 つは、遅延静的バインディングの使用、特に return new static($options); の使用から発生します。このコンテキストで static を self に置き換えても、同じ結果が得られない可能性があります。
違いを理解する
self は新しいキーワードが定義されているクラスを指しますが、static は新しいキーワードが定義されているクラスを指します。 PHP 5.3 の後期静的バインディング機能で導入された、メソッドが存在する階層内のクラスを指します。
PHP 5.2 で新しい self を使用した結果
PHP 5.2 で static を self に置き換えると、あいまいな動作が発生します。 self は、呼び出されたクラスに関係なく、メソッドが定義されているクラスを常に参照します。これにより、オブジェクトのインスタンス化が正しく行われず、不一致が生じる可能性があります。
例
次のコードを考えてみましょう。
class Animal { public static function getInstance() { return new self(); } } class Dog extends Animal { public static function getInstance() { return new static(); } }
PHP 5.3 では、Dog を呼び出します。 :getInstance() は Dog のインスタンスを返しますが、Animal::getInstance() を呼び出すとインスタンスを返します。
ただし、PHP 5.2 では、両方のメソッドの self が Animal を参照するため、どちらの呼び出しも Animal のインスタンスを返します。
結論
新しい self と新しい static は PHP 5.3 では同等ですが、PHP 5.2 では大きく異なります。 PHP 5.2 で new static($options) を new self($options) に変換すると、誤った結果が生じる可能性があり、この問題に対する既知の回避策はありません。
以上がPHP 5.2 と PHP 5.3: `new static()` と `new self()` – 主な違いと互換性の問題は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。