我在Symfony\Component\HttpFoundation\Request(第1922行)的Symphony中看到了这样的结构
return new static($query, $request, $attributes, $cookies, $files, $server, $content);
我无法谷歌。这是什么意思?
答案 0 :(得分:3)
当您在类的成员函数中编写新的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的其他更传统的用法。