什么意思是新的静态?

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

return new static($view, $data); 

你怎么理解new static

当你在一个类的成员函数内写入new self() ,你将得到该类的一个实例。 这是self关键字的魔力 。

所以:

 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注意到你使用的限定符,你可以把static关键字换成self关键字:

 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` 

这是通过称为迟静态绑定的PHPfunction实现的; 不要混淆关键字static其他更传统的用法。