2011-03-10 49 views
1

在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

我很想把它叫做reflectionesque邪恶,但我不知道这是答案材料:) – 2011-03-10 12:48:10

回答

8

不知道它是不好的做法,但它使你的代码难以理解:了解你的短(5号线)例子,我不得不想:-(

使用call_user_func()和其他同类功能可能至少有一个好处:看代码,人们会立刻明白您呼叫的方式,这不是我们通常使用的一个功能

+0

它确实混淆了真正的意图! – 2011-03-10 12:37:31

+0

谢谢,我明白了。 call_user_func()当然是更好的方法。 – mikkelbreum 2011-03-10 12:43:33

+0

不客气:-)玩得开心! – 2011-03-10 12:43:54

1

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

您的方法在该阶段更简单,但如果您添加更复杂的代码,则可能会变得更加臃肿。

+0

谢谢,你是对的,它是一个渲染过程。我不能使用多态性,因为我还没有熟悉它,但我会研究它是什么。对我目前的(WordPress主题)项目来说可能太多了,因为这很简单。 – mikkelbreum 2011-03-10 12:53:28

+0

所以对于其他人来说,这是一个不错的初学者教程:http://net.tutsplus.com/tutorials/php/understanding-and-applying-polymorphism-in-php/ – mikkelbreum 2011-03-10 12:55:14

相关问题