关于php:symfony中构造new static()的含义是什么?

What does construction new static() mean in symfony?

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

我在symfonycomponenthttpfoundation
equest(1922行)的symfony中看到这样的结构

1
return new static($query, $request, $attributes, $cookies, $files, $server, $content);

我无法用谷歌搜索。这是什么意思?


从这个答案

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

1
2
3
4
5
6
7
8
9
10
    So:

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关键字替换为静态关键字:

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的其他更传统的用法混淆。