私はいくつかのフレームワークでのコード行を見ました:新しい静的な意味は?
return new static($view, $data);
あなたがnew static
を理解する方法を教えてください。
私はいくつかのフレームワークでのコード行を見ました:新しい静的な意味は?
return new static($view, $data);
あなたがnew static
を理解する方法を教えてください。
new self()
をクラスのメンバー関数の中に書くと、そのクラスのインスタンスが得られます。 That's the magic of the self
keyword。
ので:
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が注意を払うように、static
キーワードのself
キーワードをスワップすることができます:
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`
これは、late static bindingと呼ばれるPHPの機能によって可能になりました。それ以外の、より一般的なキーワードstatic
の使用と混同しないでください。
これはどのフレームワークですか? –
例えばlaravelですが、コアでしか見つかりませんでしたが、そのAPIを使用中ではありません – Hello
詳細についてはこのページをチェックしてください。 http://stackoverflow.com/questions/5197300/new-self-vs-new-static –