2013-05-06 47 views
5

我第一次嘗試使用動態create_function,並且到現在爲止,沒有太大的成功:-)腓 - 瞭解create_function() - 通過簡單的變量

我的功能是這樣的:

function o99_brsa_custom_widgets() { 
     global $wp_meta_boxes; 
     global $o99_brsa_options; 

     for($i=0; $i> count($o99_brsa_options[content]); $i++) { 

      $widgt_id = 'o99_dashboard_widget_dyn' . $i; 
      $widgt_name = 'obmek99 widget name' . $i; 
      $out = $o99_brsa_options[content][$i]; 
      $f = create_function(' $out ',' global $out; echo $out;'); 
      do_the_widgets($widgt_id, $widgt_name, $f); 
     } 
    } 

do_the_widgets()操作僅接受直接回顯並打印小部件的內容。

$o99_brsa_options[content]是一個帶有$i元素(每個都是內容)的經過驗證的數組。

奇怪的是,$i正在對$widgt_id$widgt_name但對create_function()我得到了所有小工具打印相同的值。 (echo $out

看來,我不知道如何將一個簡單的變量傳遞給新的功能(我使用全球內create_function(),但它可以幫助小到現在。

那麼,什麼是我的錯誤/誤解/誤用現在:-) ??

+0

如果'$ out'將成爲一個全球性的,那麼你是通過它作爲一個參數? – prodigitalson 2013-05-06 14:52:44

+0

因爲不知何故,如果我沒有,沒有東西會被打印出來。 – 2013-05-06 14:54:14

+1

好吧,如果你打算把它作爲一個全局使用,那麼它的值已經在函數外部配置好了,然後你會在裏面修改它(或不是)修改將適用於全球而不僅限於內部。如果你只需要傳入一個參數,然後刪除全局。如果您需要同時更改參數的名稱,然後修改函數中的'$ out'。例如:'create_function('$ arg','global $ out; echo $ out。$ arg;');' – prodigitalson 2013-05-06 14:57:14

回答

19

create_functionstone age,當kaᵠ used pen and paper to write applications過程中,當PeeHaa埽 got a beer因爲他寫hello would,世界是現在好多了,請用closures

$f = function ($out) { 
    echo $out; 
}; 

$f("Welcome"); 

你會感謝我的一天,但你只能如果您使用create_functionGordon從這裏發往折磨我們過去的機器),他寫這

$fn = create_function(
    '$x', 
    'return $x; } $foo = 42; function foo($int) { return $int; ' 
); 

See Live Demo

+1

:-)我現在已經感謝你了:-)。但如果我需要PHP 5.2.9的支持該怎麼辦? – 2013-05-06 15:01:09

+0

您需要> = 5.3 ... – smassey 2013-05-06 15:03:28

+1

您是否知道'PHP 5.2.9'中有多少錯誤?我認爲你應該立即升級....因爲如果你得到這個工作,更多的問題會跟着 – Baba 2013-05-06 15:04:16