什么意思是新的静态?
我在一些框架中看到了这一行代码:
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
其他更传统的用法。