PHP方法链接,无需编写大量返回

PHP方法链接,无需编写大量返回,php,methods,chaining,Php,Methods,Chaining,我已经搜索过PHP方法链接,在web上提供的所有教程都使用“return$this”作为方法链接 是否有一个神奇的方法或库可以用来帮助链接类方法,而无需在每个方法的末尾写上“return$this”。使用phpstrom之类的工具,为fluent方法制作一个活动模板,其中返回$this部分已编写。然后通过快捷方式(如fluent)使用此模板。因此,您再也不会为fluent方法编写方法头、方法体和返回值 祝您度过愉快的一天在语言本身中,如果没有返回$this,就无法实现这一点。未指定返回值的函数

我已经搜索过PHP方法链接,在web上提供的所有教程都使用“return$this”作为方法链接


是否有一个神奇的方法或库可以用来帮助链接类方法,而无需在每个方法的末尾写上“return$this”。

使用phpstrom之类的工具,为fluent方法制作一个活动模板,其中
返回$this部分已编写。然后通过快捷方式(如fluent)使用此模板。因此,您再也不会为fluent方法编写方法头、方法体和返回值


祝您度过愉快的一天

在语言本身中,如果没有
返回$this
,就无法实现这一点。未指定返回值的函数和方法将在PHP中返回
null
,如以下文档所述:

由于
null
不是具有可调用方法的对象,因此在调用链中的下一项时将引发错误

您的IDE可能具有一些使重复任务更容易完成的功能,例如使用代码片段或正则表达式查找和替换。但除此之外,该语言本身目前要求您将类设计为能够流利地使用链接,或者专门设计为不使用链接


编辑1

我想你可以想象使用神奇的方法来实现这样的“自动神奇”。我会反对它,因为它是一个糟糕的范例,但这并不意味着你不能让它工作

我的想法是,您可以使用
\u调用
魔术方法来包装您的实际方法()


没有,没有;除非你使用魔法调用这不是个好主意。。。你对每个方法末尾的返回有什么问题?可能是PHP7.2()@MarkBaker中的一个新特性。我在我的库中写了太多的return$this,这与管道操作符无关;而且它不会自动返回$this
这是一个相关的新功能,如果您返回
$this
null
:如果您的目标是5.6以下的兼容性,我建议您只需在
[]
上使用
数组()
。好的一点-方括号会对任何低于5.4的内容抛出致命的错误。我会把它改过来,让评论更准确。我认为一个片段更好。我希望在进行单元测试时避免将来的问题,etc100%的人都同意使用代码片段更好地处理docblock?我认为这对于任何使用您的代码、您未来的参考或IDE中的代码完成的其他人来说都是合适的。您可以使用@return self不幸的是,我使用的是升华文本
<?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;
    }
}