我在一些框架中看到了这行代码:
return new static($view, $data);
Run Code Online (Sandbox Code Playgroud)
你怎么理解的new static?
Lig*_*ica 105
当您new self()在类的成员函数内写入时,您将获得该类的实例.这是self关键字的神奇之处.
所以:
class Foo
{
public static function baz() {
return new self();
}
}
$x = Foo::baz(); // $x is now a `Foo`
Run Code Online (Sandbox Code Playgroud)
Foo即使您使用的静态限定符是派生类,也会获得:
class Bar extends Foo
{
}
$z = Bar::baz(); // $z is now a `Foo`
Run Code Online (Sandbox Code Playgroud)
如果你想启用多态(在某种意义上),并让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`
Run Code Online (Sandbox Code Playgroud)
这可以通过称为后期静态绑定的PHP功能实现; 不要将它与其他更常规的关键字用法混淆static.
| 归档时间: |
|
| 查看次数: |
27942 次 |
| 最近记录: |