【发布时间】:2014-03-08 15:02:21
【问题描述】:
我正在编写一个应用程序 (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]();
}
问题是这个函数数组结构导致了很多问题,例如我很难从另一个数组函数中调用一个数组函数,例如这不起作用:
"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;
}
}
但这似乎并不是一个好的做法。或者也许是?
那么,我的替代方案是什么?我应该使用 switch 结构吗?还是有其他更好的解决方案?
【问题讨论】:
-
calling one array function from within another array function不起作用,因为$functions只有在完全评估 RHS 后才会被分配其值。 -
将函数名存储在变量中,然后将变量用作函数。
$func = $functions[$v];$func();
标签: php arrays function functional-programming