什么是新静态? [复制]

Posted

技术标签:

【中文标题】什么是新静态? [复制]【英文标题】:what means new static? [duplicate] 【发布时间】:2013-03-31 16:48:27 【问题描述】:

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

return new static($view, $data);

你怎么理解new static

【问题讨论】:

这是什么框架? 例如 laravel,但我发现只有在核心中,而不是在使用他们的 api 时 查看此页面了解更多信息; ***.com/questions/5197300/new-self-vs-new-static php late static binding @Allendar:所以就像decltype(*this) 禁用了多态性?多么可怕的关键字用法! 【参考方案1】:

当您在类的成员函数中写入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 的其他更常规用法混淆。

【讨论】:

hmm..shortly: new static() - 返回当前类的对象,无论扩展了哪些类,new self() - 从声明该方法的类返回对象或扩展(函数的最新版本)...我理解对吗? 是的,这对我来说已经足够了)即使基本上) (不——反过来!) 我找到的最佳解释!非常感谢。

以上是关于什么是新静态? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 main 方法需要是静态的? [复制]

在下面的代码中,静态的作用是啥? [复制]

C 函数中的静态变量有啥用? [复制]

使用啥:var 或对象名称类型? [复制]

python的复制,深拷贝和浅拷贝的区别

用于存储简单数据的“公共静态”和“私有静态”之间的区别。啥是更好的? [复制]