什么意味着新的静态?
2022-08-30 08:35:14
我在一些框架中看到了这行代码:
return new static($view, $data);
你如何理解?new static
我在一些框架中看到了这行代码:
return new static($view, $data);
你如何理解?new static
当你在一个类的成员函数中编写时,你会得到一个类的实例。这就是 self
关键字的魔力。new 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