什么是新静态? [复制]
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() - 从声明该方法的类返回对象或扩展(函数的最新版本)...我理解对吗? 是的,这对我来说已经足够了)即使基本上) (不——反过来!) 我找到的最佳解释!非常感谢。以上是关于什么是新静态? [复制]的主要内容,如果未能解决你的问题,请参考以下文章