Я программирую приложение (php), для которого требуется очень длинный список похожих, но разных функций, вызываемых набором ключей:
$functions = [
"do this" => function() {
// does this
},
"do that" => function() {
// does that
}
]
etc.
Я решил разместить аналогичные функции в массиве, потому что они не похожи на достаточно - получение того же результата с одной большой функцией, которая полна условных утверждений, не сработает. И Мне нужно иметь возможность называть их только клавишей, например:
$program = ["do this", "do that", "do this"];
foreach ($program as $k => $v) {
$functions[$v]();
}
Thing - это структура функций-массивов, вызывающая множество проблем, например, мне трудно вызвать одну функцию массива из другой функции массива, например. это не работает:
"do that" => function() {
$functions["do this"]();
}
и это:
"do that" => function() {
global $functions;
$functions["do this"]();
}
или это:
"do that" => function($functions) {
$functions["do this"]();
}
$functions["do that"]($functions);
Я предполагаю, что у меня могла бы быть одна гигантская функция с длинным оператором switch:
function similar_functions($key) {
switch ($key) {
case "do this":
// does this
break;
case "do that":
// does that
break;
}
}
Но это действительно не похоже на хорошую практику. Или может быть?
Итак, каковы мои альтернативы? Должен ли я идти с коммутационной структурой? Или есть другое, лучшее решение?