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

时间:2011-05-01 08:23:28

标签: php function parameters

我有一个像这样的函数变量......

$aName = "My Name";

该函数需要像这样传入:

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

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

runningFunction($sayHelloFunction($aName));

在runningFunction中,它会有一些条件来执行该函数,但是当我将“$ sayHelloFunction($ aName)”传递给runningFunction时,它会自动执行,但我也希望传递变量$ aName,我怎么能实现它?谢谢。

5 个答案:

答案 0 :(得分:2)

runningFunction($sayHelloFunction, $aName);

Simples。

答案 1 :(得分:1)

您必须单独传递参数。但是,您可以将它们包装在一个数组中,以便您可以将它们作为单个参数传递给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
    }
}

<击>

答案 2 :(得分:1)

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

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

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

runningFunction($sayHelloFunction, array($aName));

call_user_func_array()

答案 3 :(得分:0)

阴谋家建议将$aName作为函数的单独参数传递。

有关Variable Functions的详细信息,请访问PHP网站。

答案 4 :(得分:0)

调用runningFunction

时使用匿名函数
function runningFunction($func) {
    $func();
}

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