如何在传递函数变量时避免php函数调用


How to avoid the php function call when passing a function variable?

我有一个这样的函数变量。。。

$aName = "My Name";

函数需要像这样传入:

$sayHelloFunction = function sayHello($aName){
       echo($aName);
} 

然后,我有一个负责执行sayHelloFunction的方法:

runningFunction($sayHelloFunction($aName));

在runningFunction中,它会有一些执行函数的条件,但当我将"$sayHelloFunction($aName("传递给runningFunction时,它会自动执行,但我也想传递变量$aName,我该如何实现?非常感谢。

runningFunction($sayHelloFunction, $aName);

简单。

您必须分别传递参数。但是,您可以将它们封装在一个数组中,以便将它们作为单个参数传递给runningFunction,如下所示:

$printFunction = function($args) {
    print $args['lastname'].', '.$args['firstname'];
};
function runningFunction($f, $a) {
    $f($a);
}
$firstname = 'Bob';
$lastname = 'Smith';
$functionArguments = array(
    'firstname' => $firstname,
    'lastname' => $lastname
);
runningFunction($printFunction, $functionArguments);

如果你想让你的动态函数得到"正确"的参数,那么我看不出有什么办法可以绕过这样的东西:

function runningFunction($f, $a) {
    switch(count($a)) {
        0: $f(); break;
        1: $f($a[0]); break;
        2: $f($a[0], $a[1]); break;
        3: $f($a[0], $a[1], $a[2]); break;
        // and so on
    }
}

将参数作为数组传递,然后使用call_user_func_array()调用函数。

这样,您的runningFunction()将是绝对抽象的(正如您所要求的(,它可以调用任何类型的函数,您有责任传递正确数量的参数。

function runningFunction ($callback, $parameters=array()) {
    call_user_func_array($callback, $parameters);
}
runningFunction($sayHelloFunction, array($aName));

call_user_func_array((

xconspirisst建议将$aName作为单独的参数传递给函数。

关于可变函数的详细信息可以在PHP网站上找到。

调用runningFunction 时使用匿名函数

function runningFunction($func) {
    $func();
}
runningFunction(function() {
    $sayHelloFunction($aName));
    // You can do more function calls here...
});