【发布时间】:2016-09-24 10:37:07
【问题描述】:
为什么有些开发人员会创建一种返回new static的方法?有一个返回新静态的方法的原因是什么? 我不是在问 static 和 self 有什么区别,或者 static 和 self 是什么意思。例如,这里有一个简单的类:
<?php
class Expression
{
public static function make()
{
return new static;
}
public function find($value)
{
return '/' . $value .'/';
}
public function then($value)
{
return $this->find($value);
}
public function hi($value)
{
return "hi";
}
}
如您所见,有一个 static 方法 make() 返回 new static。然后,一些开发者调用其他方法是这样的:
$regex = Expression::make()->find('www');
这样做的目的是什么?我看到这里我们不使用 new Expression 语法,如果这就是重点 - 那么为什么不将所有方法都设为静态呢?有什么区别,有一个方法返回 new static(而其他方法不是静态的)的原因是什么?
【问题讨论】:
-
New self vs. new static 的答案清楚地说明了差异。
-
@Ankur Tiwari 我不是问static和self有什么区别,或者静态 & self 做。
-
@jeyoung 我的问题不在于新自我与新静态之间的区别......
-
@PeraMika 看起来你不明白
new static()的目的,但如果你明白了……它是为了重复使用。您可以在单个基类中定义静态make方法,并且您将拥有与派生类相同的功能。
标签: php class oop static late-static-binding