ホームページ > バックエンド開発 > PHPチュートリアル > PHP 5.2 から 5.3 への移行: `new self()` と `new static()` の違いは何ですか?

PHP 5.2 から 5.3 への移行: `new self()` と `new static()` の違いは何ですか?

Barbara Streisand
リリース: 2024-12-18 15:40:12
オリジナル
644 人が閲覧しました

PHP 5.2 to 5.3 Migration: What's the Difference Between `new self()` and `new static()`?

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 はこの機能をサポートしていません。

「新しいセルフ」と「新しい静的」の主な違い

  • セルフ: 新しいキーワードが含まれるクラスを参照します
  • Static: 後期の静的バインディング (PHP 5.3) では、メソッドが呼び出されたクラスを参照します。

例:

次の点を考慮してください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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート