Как избежать вызова функции php при передаче переменной функции? - PullRequest
1 голос
/ 01 мая 2011

У меня есть переменная функции, подобная этой ...

$aName = "My Name";

Функция должна передаваться следующим образом:

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

Затем у меня есть метод, который отвечает за выполнениеsayHelloFunction:

runningFunction($sayHelloFunction($aName));

в runningFunction, у нее будет некоторое условие для выполнения функции, но когда я передаю «$ sayHelloFunction ($ aName)» в runningFunction, она выполняется автоматически, но я бы хотелтакже передать переменную $ aName, как мне ее достичь?Спасибо.

Ответы [ 5 ]

2 голосов
/ 01 мая 2011
runningFunction($sayHelloFunction, $aName);

Simples.

1 голос
/ 01 мая 2011

Передайте параметры в виде массива, а затем используйте call_user_func_array() для вызова вашей функции.

Таким образом, ваш runningFunction() будет абсолютно абстрактным (как вы и просили), он может вызвать любой тип функцииВы должны передать правильное количество параметров.

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

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

call_user_func_array ()

1 голос
/ 01 мая 2011

Вам придется передавать аргументы отдельно. Однако вы можете заключить их в массив, чтобы передать их 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
    }
}

0 голосов
/ 01 мая 2011

Использовать анонимную функцию при вызове runningFunction

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

runningFunction(function() {
    $sayHelloFunction($aName));
    // You can do more function calls here...
});
0 голосов
/ 01 мая 2011

, как предложил xconspirisist, передает $aName в качестве отдельного параметра функции.

Подробная информация о Переменные функции можно найти на сайте PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...