什么意味着新的静态?

php
2022-08-30 08:35:14

我在一些框架中看到了这行代码:

return new static($view, $data);

你如何理解?new static


答案 1

当你在一个类的成员函数中编写时,你会得到一个类的实例。这就是 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注意你使用的限定符,你可以将关键字换成关键字:selfstatic

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


答案 2

推荐