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