我搜索了PHP方法链,并且网上提供的所有教程都使用“return $ this”进行方法链接。
是否有一个神奇的方法或库可用于帮助链接一个类方法,而无需在每个方法的末尾写入“return $ this”。
答案 0 :(得分:2)
在语言本身内,如果没有return $this
,就无法实现这一目标。未指定返回值的函数和方法将在PHP中返回null
,如此处的文档中所述:http://php.net/manual/en/functions.returning-values.php。
由于null
不是具有可调用方法的对象,因此在调用链中的下一个项目时将抛出错误。
您的IDE可能具有一些功能,可以使重复性任务更容易完成,例如使用代码段或正则表达式查找和替换。但除此之外,语言本身目前要求你设计你的课程,用链接流利,或专门设计它不是。
编辑1
我想你可以想象你可以使用魔术方法来实现这样的事情"自动魔法"。我建议反对它,因为它是一个糟糕的范例,但这并不意味着你无法使它发挥作用。
我的想法是你可以使用__call
魔术方法来包装你的实际方法(http://php.net/manual/en/language.oop5.overloading.php#object.call)。
<?php
class Whatever
{
public function __call($method, $parameters)
{
//If you're using PHP 5.6+ (http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list)
$this->$method(...$parameters);
//If using < PHP 5.6
call_user_func_array(array($this, $method), $parameters);
//Always return self
return $this;
}
//Mark methods you want to force chaining on to protected or private to make them inaccessible outside the class, thus forcing the call to go through the __call method
protected function doFunc($first, $second)
{
$this->first = $first;
$this->second = $second;
}
}
所以我认为这是一种可能性,但我个人认为一个神奇的解决方案虽然有效,却会散发出一种重要的代码味道,这可能会让你更好地处理return $this
在哪里打字打算,根据您的设计,允许链接。
答案 1 :(得分:0)
使用像phpstrom这样的工具,为已经写好return $this;
部分的流畅方法制作一个实时模板。然后通过快捷方式使用此模板流利。因此,您永远不会再为Fluent方法编写方法标题,正文和返回值。
http://jetbrains.com/help/phpstorm/live-templates.html
度过愉快的一天