2013-05-06 51 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