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

传递函数变量时如何避免php函数调用?,php,function,parameters,Php,Function,Parameters,我有一个这样的函数变量 $aName = "My Name"; 函数需要像这样传入: $sayHelloFunction = function sayHello($aName){ echo($aName); } $printFunction = function($args) { print $args['lastname'].', '.$args['firstname']; }; function runningFunction($f, $a) { $f(

我有一个这样的函数变量

$aName = "My Name";
函数需要像这样传入:

$sayHelloFunction = function sayHello($aName){
       echo($aName);
} 
$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
    }
}
然后,我有一个方法负责执行sayHelloFunction:

runningFunction($sayHelloFunction($aName));
在runningFunction中,它会有一些执行函数的条件,但当我将“$sayHelloFunction($aName)”传递给runningFunction时,它会自动执行,但我也想传递变量$aName,我如何实现它?多谢各位

runningFunction($sayHelloFunction, $aName);
简单


简化。

正如xconspirist建议的那样,将
$aName
作为单独的参数传递给函数


有关的详细信息可以在PHP站点上找到。

正如Xconspirist建议的那样,将$aName作为单独的参数传递给函数


有关的详细信息可以在PHP网站上找到。

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

$sayHelloFunction = function sayHello($aName){
       echo($aName);
} 
$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
    }
}
如果您想让动态函数获得“正确”的参数,那么我看不出有什么办法可以避免这种情况:

$sayHelloFunction = function sayHello($aName){
       echo($aName);
} 
$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
    }
}

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

$sayHelloFunction = function sayHello($aName){
       echo($aName);
} 
$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
    }
}
如果您想让动态函数获得“正确”的参数,那么我看不出有什么办法可以避免这种情况:

$sayHelloFunction = function sayHello($aName){
       echo($aName);
} 
$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
    }
}

将参数作为数组传递,然后使用
调用\u user\u func\u array()
调用函数

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

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

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

将参数作为数组传递,然后使用
调用\u user\u func\u array()
调用函数

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

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

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

调用
runningFunction

function runningFunction($func) {
    $func();
}

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

调用
runningFunction

function runningFunction($func) {
    $func();
}

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

我认为你把php和javascript@Ibrahim-这是一个非常有效的PHP问题。我认为你混淆了PHP和javascript@Ibrahim-这是一个非常有效的PHP问题。但是我的sayHelloFunction需要param,我不想在runningFunction中分配param…但是我的sayHelloFunction需要param,我不想在runningFunction中分配参数……我想让runningFunction抽象,这不取决于$sayHelloFunction,我不介意再给runningFunction传递一个参数,但我正在考虑,如果我有一个参数require,比如$sayHelloFunction,它需要两个参数,$aName,$aTime,然后,我需要为runningFunction多写一个参数,这不是我想要的wt…我想让runningFunction抽象化,这不取决于$sayHelloFunction,我不介意再给runningFunction传递一个参数,但我正在考虑,如果我还有一个参数require,比如$sayHelloFunction,它需要两个参数,$aName,$aTime,然后,我需要为运行函数再编写一个参数,这不是我想要的wt….
call\u user\u func\u array()
基本上执行您在
switch
语句中执行的操作。
call\u user\u func\u array()
基本上执行您在
switch
语句中执行的操作。