【发布时间】:2019-09-07 03:06:05
【问题描述】:
所以考虑下面的例子:
interface ViewBuilderContract {
public function addFormName(string $formName): self;
}
现在让我们实现这个:
class ViewBuilder implements ViewBuilderContract {
private $formNames = [];
public function addFormName(string $formName): self {
$this->formNames[] = $formName;
return $this;
}
}
就docs而言:
self参数必须是与参数相同的类的实例 方法定义在。这只能用于类和实例 方法。
这就是我通过返回 $this 所做的 - 根据文档。
但是当我跑步时:
(new ViewBuilder)->addFormName('sample');
我明白了,你可以看到here - click execute code:
ViewBuilder 的声明::addFormName(string $formName): ViewBuilder 必须与 ViewBuilderContract::addFormName(string $formName): ViewBuilderContract
根据文档,这没有意义。它应该是一个有效的回报。我只是删除self 吗?如果是这样,为什么?有没有办法规定返回值?
【问题讨论】:
-
虽然很有趣,但它清楚地说明了错误中的问题,self 指的是 ViewBuilderContract 而不是 ViewBuilder 中的 self
-
@LawrenceCherone 我很高兴你能阅读。现在让我们关注手头的 WHY 问题。
标签: php