#php #function #parameters
#php #функция #параметры
Вопрос:
У меня есть функциональная переменная, подобная этой…
$aName = "My Name";
Функция должна передаваться следующим образом:
$sayHelloFunction = function sayHello($aName){
echo($aName);
}
Кроме того, у меня есть метод, который отвечает за выполнение функции sayHelloFunction:
runningFunction($sayHelloFunction($aName));
в runningFunction у нее будет некоторое условие для выполнения функции, но когда я передаю «$sayHelloFunction($aName)» в runningFunction, она выполняется автоматически, но я хотел бы также передать переменную $ aName, как я могу этого добиться? Спасибо.
Комментарии:
1. я думаю, вы путаете php и javascript
2. @Ibrahim — это совершенно правильный вопрос PHP.
Ответ №1:
runningFunction($sayHelloFunction, $aName);
Simples.
Комментарии:
1. но для моей функции sayHelloFunction требуется параметр, и я не хочу назначать параметр внутри функции runningFunction…..
Ответ №2:
Вам придется передавать аргументы отдельно. Однако вы могли бы обернуть их в массив, чтобы вы могли передавать их 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
}
}
Комментарии:
1.
call_user_func_array()
в основном делает то, что вы сделали в своемswitch
заявлении.
Ответ №3:
Передайте параметры в виде массива, а затем используйте call_user_func_array()
для вызова вашей функции.
Таким образом, ваш runningFunction()
будет абсолютно абстрактным (как вы и просили), он может вызывать функции любого типа, вы несете ответственность за передачу правильного количества параметров.
function runningFunction ($callback, $parameters=array()) {
call_user_func_array($callback, $parameters);
}
runningFunction($sayHelloFunction, array($aName));
Ответ №4:
как предложил xconspirisist, передайте $aName
в качестве отдельного параметра функции.
Подробную информацию о функциях переменных можно найти на сайте PHP.
Комментарии:
1. Я хочу сделать runningFunction абстрактной, которая не зависит от функции $sayHelloFunction, я не возражаю передать runningFunction еще один параметр, но я рассматриваю, если у меня есть еще один параметр require, например, $ sayHelloFunctionAgain , который требует двух параметров, $ aName, $ aTime , тогда мне нужно написать еще один параметр для runningFunction , это не то, что я хочу….
Ответ №5:
Используйте анонимную функцию при вызове runningFunction
function runningFunction($func) {
$func();
}
runningFunction(function() {
$sayHelloFunction($aName));
// You can do more function calls here...
});