@flexpc

Как хранить функцию в массиве?

$R = array(
'index'  => index(),
'store' => store()
)

function index()
{
    echo 'index';
}

function store()
{
    echo 'store';
}

$R['index'];


Как сделать такой код реальным, то есть что бы при вызове элемента из массива, выполнялась функцию записанная в нём.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Всё в документации: Обращение к функциям через переменные ("Variable functions" на англ.)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Вообще говоря, вызов функций по текстовому имени - антипаттерн и говнокод.
Провоцирует ошибки из-за того, что в переменной оказалось что-то не то, и делает совершенно невозможным рефакторинг кода - ни одна IDE такого вызова функции не найдет.
Есть два варианта, исправляющих эту кривизну:
switch($functionName) {
  case 'index': return index();
  case 'store': return store();
}

$registry = array(
  'index'  => new ActionIndex(),
  'store' => new ActionStore()
)
$registry[$functionName]->run();
Ответ написан
tomclancys
@tomclancys
$index = function() {
    return 'index';
};

$store = function() {
    return 'store';
};

$R = [
    'index' => $index(),
    'store' => $store()
];

echo $R['index'];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы