关于php:新的静态是什么意思?


what means new static?

本问题已经有最佳答案,请猛点这里访问。

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

1
return new static($view, $data);

你怎么理解new static


在类的成员函数中编写new self()时,会得到该类的一个实例。这就是self关键字的魔力。

所以:

1
2
3
4
5
6
7
8
class Foo
{
   public static function baz() {
      return new self();
   }
}

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

即使您使用的静态限定符用于派生类,也会得到一个Foo

1
2
3
4
5
class Bar extends Foo
{
}

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

如果要启用多态性(在某种意义上),并让PHP注意您使用的限定符,可以将self关键字替换为static关键字:

1
2
3
4
5
6
7
8
9
10
11
12
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的其他更传统的用法混淆。