新静电是什么意思?

Hel*_*llo 61 php

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

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.

  • hmm..shortly:new static() - 返回当前类的对象,无论扩展哪个类,new self() - 从声明或扩展该方法的类返回对象(函数的最后版本) )...我理解对吗? (15认同)
  • (不 - 反过来!) (3认同)