ホームページ > バックエンド開発 > PHPチュートリアル > PHP `self` と `static`: `new static()` と `new self()` はどのような点で異なりますか?

PHP `self` と `static`: `new static()` と `new self()` はどのような点で異なりますか?

Susan Sarandon
リリース: 2024-12-14 00:15:09
オリジナル
521 人が閲覧しました

PHP `self` vs. `static`: When Does `new static()` Differ from `new self()`?

新しい self と新しい static の違いを理解する

PHP では、self と static は新しいオブジェクトをインスタンス化するためにクラス メソッド内でよく使用されます。特に継承の文脈では。ただし、これら 2 つのキーワードには微妙な違いがあります。

新しい self と新しい static

  • self は、新しいキーワードが定義されているクラスを指します。現在のスコープと継承階層を考慮します。
  • static は、PHP 5.3 で導入され、new を呼び出すメソッドが存在したクラスを指します。

PHP 5.2 への影響

PHP 5.3 ライブラリを PHP 5.2 に変換する場合、遅延静的バインディングのサポートがありません。 、 new static($options) を new self($options) に置き換えると、意図した結果が得られない可能性があります。これは、self が常に new が実際に書き込まれるクラスを参照するのに対し、static はターゲット クラスの解決に柔軟性を提供するためです。

例:

次のコードを考えてみましょう。 PHP 5.2:

class A {
    public static function create() {
        return new self();
    }
}

class B extends A {}

$object = B::create(); // $object is of class A, not B
ログイン後にコピー

PHP 5.3 では、同じコードでクラス B のオブジェクトがインスタンス化されていました。 static は呼び出しクラスに解決されるためです。

現在の推奨事項

PHP 5.2 はアクティブにサポートされなくなったため、この問題の回避策を見つけるのは現実的ではありません。互換性の理由から、遅延静的バインディングの使用を完全に避けることをお勧めします。

以上がPHP `self` と `static`: `new static()` と `new self()` はどのような点で異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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