在PHP中,我正在考虑做这样的事情:
function foo(){
echo 'bar';
}
$fn = 'foo';
$fn();
它有效,但它被认为是不好的做法吗?
我有一个多维数组元素,每个元素都有一个相应的函数。我想存储该函数名,并在遍历数组时为每个元素调用相应的函数。
类似的东西:
function render_el1(){ echo 'et';}
function render_el2(){ echo 'to';}
$elements = array(
'el_1' => array(
'name' => 'Element One'
, 'func' => 'render_el1'
)
, 'el_2' => array(
'name' => 'Element Two'
, 'func' => 'render_el2'
)
);
foreach($elements as $element => $options){
$fn = $options['func'];
echo '<h1>'.$options['name'].'</h1>';
if (function_exists($fn)) {
$fn();
}
}
对这种方法的任何评论都非常受欢迎,我也想知道在编程术语中这种方法的用途。
答案 0 :(得分:8)
不确定是不良做法,但会让您的代码难以理解:了解您的简短(5行)示例,我不得不考虑: - (
使用call_user_func()
和其他相同类型的函数可能至少有一个优点:查看代码,人们会立即明白你正在以一种我们通常不习惯的方式调用函数
答案 1 :(得分:1)
你想在第二个例子中将函数注册到一个数组中,然后调用它们看起来像渲染过程。这类似于在C中使用函数指针(或绘制事件回调等)。如果您不想/不能使用多态( 使OOP值得的功能),这是一种好的方法。
在这个阶段你的方法更简单,但如果你要添加更复杂的代码,可能会变得更加臃肿。