PHP - 理解 create_function() - 传递简单变量

5

这是我第一次尝试使用动态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$widgt_id$widgt_name 上运作良好,但在 create_function() 上,我在所有小部件中打印相同的值。(echo $out

似乎我不知道如何将简单变量传递给新函数(我正在 create_function() 中使用全局变量,但目前帮助很少。)

那么,现在我的错误/误解/误用是什么呢?:-)


如果$out将成为一个全局变量,那你为什么要将它作为参数传递呢? - prodigitalson
因为不知道为什么,如果我不这样做,就什么也不会被打印出来。 - Obmerk Kronen
1
如果你要将它作为全局变量使用,那么它的值已经在函数外配置好了,然后你会在函数内修改它(或者不修改),这个修改就会全局应用,而不仅仅是函数内部。如果你只需要传递一个参数,则删除 global 关键字即可。如果你需要同时进行这两个操作,则改变参数名称,然后让它在函数内部修改 $out。示例:create_function('$arg', 'global $out; echo $out . $arg;'); - prodigitalson
1个回答

19

create_function是在石器时代使用的,当时kaᵠ用纸笔编写应用程序PeeHaa埽因为写了hello would而得到了啤酒。现在世界变得更好了,请使用closures

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

$f("Welcome");

总有一天你会感谢我,但你只能在你是Gordon那个从过去来折磨我们的机器)的情况下使用create_function函数,因为他写了这个函数。

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

查看在线演示


1
:-) 我已经提前感谢你了 :-)。但是如果我需要 PHP 5.2.9 的支持怎么办? - Obmerk Kronen
1
你知道 PHP 5.2.9 中有多少个 bug 吗?我认为你应该立即升级……因为如果你让它工作,更多的问题会随之而来。 - Baba
是的先生! :-) 你说得很对。谢谢你的提示(我不知道闭包,我想工具对进步确实很重要 :-) 。而且你的链接非常酷(特别是99瓶啤酒那个)。 - Obmerk Kronen
欢迎您...这里有更多的提示:http://php.net/manual/en/functions.anonymous.php 和 https://dev59.com/iHE95IYBdhLWcg3wMrEB - Baba
好的,我想我需要将标题从“理解create_function()”更改为“我应该使用create_function()吗?”-答案会短得多... - Obmerk Kronen
只需使用匿名函数即可...它们更容易理解...我只是为了让你看到create_function示例有多么复杂。 - Baba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接