symfony中构造new static()的含义是什么?

时间:2016-02-03 13:22:12

标签: php symfony

我在Symfony\Component\HttpFoundation\Request(第1922行)的Symphony中看到了这样的结构

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

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

1 个答案:

答案 0 :(得分:3)

From this answer

当您在类的成员函数中编写新的self()时,您将获得该类的实例。这是self关键字的神奇之处。

    So:

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