我想用自己的父函数链接一个方法。
示例:
class Query
{
protected $limit;
/**
* Returns some third object that isn't in this family.
* This object represents the results, and also has
* a first function that gets called in a chain.
*/
public function get()
{
// Do Stuff
return new /* ... */;
}
public function take($amount)
{
$this->limit = $amount;
return $this;
}
}
class ChildQuery extends Query
{
protected $singular = false;
public function get()
{
if($this->singular)
return $this->take(1)->parent::get()->first();
return parent::get()
}
public function singular()
{
$this->singular = true;
return $this;
}
}
这显然不是完整的功能集,也不起作用,但你明白了。我希望ChildQuery::get
能够在链中调用Query::get
。
现在,我必须这样做:
public function get()
{
$this->take(1);
parent::get()->first();
}
这对我没有吸引力。有什么想法吗?
我正在运行PHP 7,如果重要的话。
我的最终结果看起来像这样:
$query->singular()->get(); // ($query is a ChildQuery)
答案 0 :(得分:1)
不可能通过对象的公共接口调用父方法(即使它与当前上下文是同一个类/对象)。请查看https://stackoverflow.com/a/11828729/2833639。
在我看来,你的解决方案是正确的方法。
关闭主题:我建议您阅读https://ocramius.github.io/blog/fluent-interfaces-are-evil/以评估流畅的界面是否适合您的使用案例。