不好的做法?它叫什么'

时间:2011-03-10 12:33:08

标签: php

在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();
    }
}

对这种方法的任何评论都非常受欢迎,我也想知道在编程术语中这种方法的用途。

2 个答案:

答案 0 :(得分:8)

不确定是不良做法,但会让您的代码难以理解:了解您的简短(5行)示例,我不得不考虑: - (

使用call_user_func()和其他相同类型的函数可能至少有一个优点:查看代码,人们会立即明白你正在以一种我们通常不习惯的方式调用函数

答案 1 :(得分:1)

你想在第二个例子中将函数注册到一个数组中,然后调用它们看起来像渲染过程。这类似于在C中使用函数指针(或绘制事件回调等)。如果您不想/不能使用多态( 使OOP值得的功能),这是一种好的方法。

在这个阶段你的方法更简单,但如果你要添加更复杂的代码,可能会变得更加臃肿。