2011-03-10 50 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

相關問題