因此,请考虑以下示例:
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
吗?如果是这样,为什么呢?有没有办法规定返回值呢?
发布于 2019-04-17 07:37:32
不能指定在接口中返回self
。参见this answer for more information。
您可以指定该函数返回一个ViewBuilderContract
<?php
interface ViewBuilderContract {
public function addFormName(string $formName): ViewBuilderContract;
}
class ViewBuilder implements ViewBuilderContract {
private $formNames = [];
public function addFormName(string $formName): ViewBuilderContract {
$this->formNames[] = $formName;
return $this;
}
}
https://stackoverflow.com/questions/55717874
复制相似问题