我在一些框架中看到了这行代码:
return new static($view, $data);
您如何理解new static
?
答案 0 :(得分:95)
当您在类的成员函数中编写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注意到您使用的限定符,则可以将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`
这可以通过称为late static binding的PHP功能实现;不要将其与关键字static
的其他更常规用法混淆。