1. ホーム
  2. php

新しい静的とは何ですか?[重複]。

2023-09-28 08:01:44

質問

いくつかのフレームワークで、このようなコードを見かけました。

return new static($view, $data);

をどのように理解するのでしょうか? new static ?

どのように解決するのですか?

と書くと new self() と書くと、そのクラスのインスタンスを取得します。 の魔法です。 self キーワード .

だから

class Foo
{
   public static function baz() {
      return new self();
   }
}

$x = Foo::baz();  // $x is now a `Foo`

を取得します。 Foo を使用した静的修飾子が派生クラスであっても

class Bar extends Foo
{
}

$z = Bar::baz();  // $z is now a `Foo`

ある意味で)ポリモーフィズムを有効にし、使用した修飾子をPHPに認識させたい場合は self キーワードを static キーワードを使用します。

class Foo
{
   public static function baz() {
      return new static();
   }
}

class Bar extends Foo
{
}

$wow = Bar::baz();  // $wow is now a `Bar`, even though `baz()` is in base `Foo`

これは、PHPの機能である 後期静的バインディング このキーワードは、他のもっと一般的な使い方と混同しないようにしましょう。 static .