新静电是什么意思?

时间:2013-04-09 09:55:21

标签: php

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

return new static($view, $data);

您如何理解new static

1 个答案:

答案 0 :(得分:95)

当您在类的成员函数中编写new self()时,您将获得该类的实例。 That's the magic of the self keyword

所以:

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`

这可以通过称为late static binding的PHP功能实现;不要将其与关键字static的其他更常规用法混淆。