Функция как значение массива

Я не могу найти ничего из этого, и мне было интересно, можно ли сохранить ссылку на функцию или функцию как значение для элемента массива. Например, для

array("someFunc" => &x(), "anotherFunc" => $this->anotherFunc()) 

Благодаря!

Solutions Collecting From Web of "Функция как значение массива"

Вы можете «ссылаться» на любую функцию. Ссылка на функцию не является ссылкой в ​​смысле «адрес в памяти» или что-то в этом роде. Это просто имя функции.

 <?php $functions = array( 'regular' => 'strlen', 'class_function' => array('ClassName', 'functionName'), 'object_method' => array($object, 'methodName'), 'closure' => function($foo) { return $foo; }, ); // while this works $functions['regular'](); // this doesn't $functions['class_function'](); // to make this work across the board, you'll need either call_user_func($functions['object_method'], $arg1, $arg2, $arg3); // or call_user_func_array($functions['object_method'], array($arg1, $arg2, $arg3)); 

PHP поддерживает концепцию переменных функций, поэтому вы можете сделать что-то вроде этого:

 function foo() { echo "bar"; } $array = array('fun' => 'foo'); $array['fun'](); 

Yout может проверить больше примеров в руководстве .

Да, ты можешь:

 $array = array( 'func' => function($var) { return $var * 2; }, ); var_dump($array['func'](2)); 

Это, конечно, требует поддержки анонимной функции PHP, которая появилась с PHP версии 5.3.0. Тем не менее, это оставит вас с довольно нечитаемым кодом.

проверьте PHP call_user_func . рассмотрим приведенный ниже пример.

рассмотрим две функции

 function a($param) { return $param; } function b($param) { return $param; } $array = array('a' => 'first function param', 'b' => 'second function param'); 

теперь, если вы хотите выполнить всю функцию в последовательности, вы можете сделать это с помощью цикла.

 foreach($array as $functionName => $param) { call_user_func($functioName, $param); } 

плюс массив может содержать любой тип данных, будь то вызов функции, вложенные массивы, объект, строка, целое число и т. д. и т. д.