Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oneliner在PHP中使用相同参数调用多个函数_Php_Function - Fatal编程技术网

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

Oneliner在PHP中使用相同参数调用多个函数,php,function,Php,Function,我有两个或更多的函数总是采用相同的参数。参数是另一个函数调用的返回值 这是代码: $result = getMyResult(); myFunction1($result); myFunction2($result); ... 问题 有没有办法用同一个参数在同一行上调用多个函数 我正在努力实现的一个例子: 要求 解决方案可以是过程式的,也可以是面向对象的 我不想将getMyResult()的返回值临时存储在变量中 我只想调用getMyResult()一次 我不想将函数调用包装在助手函数中*

我有两个或更多的函数总是采用相同的参数。参数是另一个函数调用的返回值

这是代码:

$result = getMyResult();

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

有没有办法用同一个参数在同一行上调用多个函数

我正在努力实现的一个例子:

要求

  • 解决方案可以是过程式的,也可以是面向对象的
  • 我不想将
    getMyResult()
    的返回值临时存储在变量中
  • 我只想调用
    getMyResult()
    一次
  • 我不想将函数调用包装在助手函数中*
*像这样

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

如果
myHelperFunction()
是最接近的解决方案,然后我很高兴听到这个消息。

我做了更多的研究,我能找到的最符合我要求的答案是1:面向对象的方法和流畅的设置程序,或者2:使用辅助功能

(在此处找到解决方案1:)

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

$result = getMyResult();
$myclass->myMethod1($result)->myMethod2($result)->...
唯一的“问题”是我必须将参数存储在临时变量中,因为我不想多次调用
getMyResult()

解决方案2(3/4要求)辅助功能程序解决方案

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

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

结论


我找不到任何满足我所有要求的解决方案,我也无法确定目前是否还有其他解决方案。解决方案12都会使我的代码设计更容易。现在,我将用解决方案1

解决这个问题,有趣的是,这个问题仍然悬而未决,没有一个真正令人满意的答案。下面是一个函数,它将调用任意数量的带有某些参数的函数

它不是一行程序,但一旦您编写了它,就再也不需要了(不需要每次都使用helper函数)。在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));
    };
}

答案是你问题的最后一行。
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));
    };
}