Php 什么是新静态?

Php 什么是新静态?,php,Php,我在一些框架中看到了这一行代码: return new static($view, $data); 如何理解new static?在类的成员函数中编写new self()时,会得到该类的一个实例 因此: 即使使用的静态限定符用于派生类,也会得到一个Foo: class Bar extends Foo { } $z = Bar::baz(); // $z is now a `Foo` 如果您想启用多态性(从某种意义上讲),并让PHP注意您使用的限定符,您可以将self关键字替换为stati

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

return new static($view, $data);

如何理解
new static

在类的成员函数中编写
new self()
时,会得到该类的一个实例

因此:

即使使用的静态限定符用于派生类,也会得到一个
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`

这是由PHP特性实现的,称为;不要把它和其他更传统的关键字用法混淆起来,比如说laravel,这是什么框架?但是我发现只有在核心,而不是在使用他们的ApicCheck这个页面获取更多信息时@Allendar:这就像是禁用多态性的
decltype(*this)
?多么可怕的关键字用法!嗯..简而言之:new static()-返回当前类的对象,不管扩展了哪些类,而new 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`