Php &引用;管道;方法链中的方法

Php &引用;管道;方法链中的方法,php,yii,chaining,Php,Yii,Chaining,最近我为yii实现了以下行为: 它的主要目的是允许方法链接到作为getter的方法。这种风格的东西可以在任何其他语言/框架中实现。它更像是方法链接狂热者的语法糖 自述: 例如,owner有一个方法gimmeAll,它返回我们需要的数组 想要通过另一个所有者的方法进行转换,就让它变成什么吧。 我们称之为旧式: $bla = Something::create()->toSomething(Something::create()->one()->two()->three()-

最近我为yii实现了以下行为:

它的主要目的是允许方法链接到作为getter的方法。这种风格的东西可以在任何其他语言/框架中实现。它更像是方法链接狂热者的语法糖

自述:

例如,owner有一个方法gimmeAll,它返回我们需要的数组 想要通过另一个所有者的方法进行转换,就让它变成什么吧。 我们称之为旧式:

$bla = Something::create()->toSomething(Something::create()->one()->two()->three()->gimmeAll());
但通过这种行为,我们可以更优雅地做到:

$bla = Something::create()->one()->two()->three()->pipe('gimmeAll')->unpipe('toSomething', '{r}');
如果unpiped方法只有一个参数,那么我们可以省略“{r}” 参数,并像这样调用它:

$bla = Something::create()->one()->two()->three()->pipe('gimmeAll')->unpipe('toSomething');
因此,我的问题是:
  • 它真的有用吗?我在深夜实现了这个东西 还是不确定

  • 可能是“自行车”吗?这样的东西可能存在于另一个lang/框架中吗


  • 基于

    不,它没有用,甚至是多余的。这里引用了一些话:

    我认为将结果保存在一个变量中并将其传递给另一个方法非常重要 更清晰、可读、更好地受IDE支持,而且更加理智

    键入和测试的代码要多一些,但最佳编程实践并不是少键入代码



    目前在实际场景中,我还使用了gimmeAllToSomething()方法。因此,我们可以把它看作是一扇不需要去的门。

    个人观点:我真的不喜欢用字符串调用类/方法/函数。在大多数像样的IDE中很难找到(更不用说重构了),这使得寻找bug变得更加困难。如果它在构建一个新对象时节省了相当多的CPU周期,那么它是值得考虑的,但是如果它没有,那么在我看来,用它做一些新的事情应该是一个新的声明。@Wrikken我也倾向于这样做。作为一种解决方法,可以实现此选项,但不能将其作为一种行为—仅作为父类的方法:Something::create()->bla->pipe({r}')->somethod()->toSomething({r}'),其中pipe()返回的不是所有者,而是将所有调用传递给所有者的包装器。但这有点奇怪:)thread@yiiforum:
    class Something
    {
            public function gimmeAllToSomething()
            {
                    return $this->toSomething($this->gimmeAll());
            }
    }
    
    $bla = Something::create()->one()->two()->tree()->gimmeAllToSomething();