PHP の "New Self" と "New Static" の違いを理解する
PHP 5.3 ライブラリを PHP 5.2 に変換すると課題が生じる可能性があります、主に構文の違いが原因です。問題点の 1 つは、return new static($options) などの遅延静的バインディングの使用です。
「新しい自己」への変換の影響
return new static($options) を return new self($options) に変更しても、同じ結果は生成されません。 PHP 5.3 で導入された後期静的バインディングを使用すると、メソッドが呼び出されるクラスを参照する static キーワードを使用してクラスのメソッドを呼び出すことができます。ただし、PHP 5.2 はこの機能をサポートしていません。
「新しいセルフ」と「新しい静的」の主な違い
例:
次の点を考慮してくださいcode:
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A
この例では、メソッドが A で定義されているため、get_self の自己呼び出しはクラス A にバインドされます。ただし、get_static の静的呼び出しは、メソッドが存在したクラスにバインドされます。呼び出されます。これはコンテキストによって異なります (例: 2 番目の B)
結論
PHP 5.2 では、遅延静的バインディングに対する直接的な回避策はありません。新しい static を新しい self に置き換えても、同じ動作は得られません。 PHP 5.3 コードを以前のバージョンに変換する場合、これらのキーワードの違いを理解することが重要です。
以上がPHP 5.2 から 5.3 への移行: `new self()` と `new static()` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。