Oneliner在PHP中使用相同的参数调用多个函数

时间:2018-09-05 09:58:28

标签: php function

我有2个或更多函数,它们始终采用相同的参数。该参数是另一个函数调用的返回值。

这是代码:

$result = getMyResult();

myFunction1($result);
myFunction2($result);
...

问题

是否可以使用相同的参数在同一行上调用多个函数?

我要实现的目标的示例:

myFunction1,myFunction2...(getMyResult());

需求

  • 解决方案可以是过程性的或面向对象的。
  • 我不想将返回的getMyResult()值临时存储在变量中。
  • 我只想打一次getMyResult()
  • 我不想将函数调用包装在辅助函数中

*这样。

function myHelperFunction($result) {
    myFunction1($result);
    myFunction2($result);
    ...
}

如果myHelperFunction()是最接近的解决方案,那么我很高兴听到它。

2 个答案:

答案 0 :(得分:0)

我进行了更多研究,得出的最符合我要求的答案是:1:面向对象方法熟练的二传手或2:具有辅助功能

(在此处找到解决方案1:Call multiple methods on object?

解决方案1 ​​ (3/4要求)用方法创建类,并让每个方法返回对象本身。

$result = getMyResult();
$myclass->myMethod1($result)->myMethod2($result)->...

唯一的“问题”是我必须将参数存储在temp变量中,因为我不想多次调用getMyResult()

解决方案2 (3/4要求) Helper函数过程解决方案。

function myHelperFunction($result) {
    myFunction1($result);
    myFunction2($result);
    ...
}

myHelperFunction(getMyResult());

唯一的“问题”是我必须定义一个调用所有其他函数的函数。该函数不是动态的,因为如果不实现进一步的逻辑,我将无法控制内部调用的函数的数量。

结论

我找不到满足我所有要求的解决方案,并且目前无法确定是否还有其他解决方案。 解决方案1 ​​ 2 都可以简化我的代码设计。现在,我将使用解决方案1 ​​

答案 1 :(得分:0)

有趣的是,这仍然没有真正令人满意的答案。这是一个函数,它将调用任意数量的带有一些参数的函数。

它不是单行代码,但是一旦你写了它,你就再也不需要了(每次都不需要一个辅助函数)。在 PHP 7.4 之前,它看起来像这样:

function for_effect() {
  $args = func_get_args();
  return function() use($args) {
          $inner_args = func_get_args();
          array_walk($args, function($fn) use ($inner_args){call_user_func_array($fn, $inner_args);});
  };
}
 
$print_me = function() {
  var_dump( func_get_args());
};

for_effect($print_me, $print_me)('Some argument');

发布 7.4,更好一些:

function for_effect() {
    $args = func_get_args();
    return function() use($args) {
        $inner_args = func_get_args();
        array_walk($args, fn($fn)=>call_user_func_array($fn, $inner_args));
    };
}