代码之家  ›  专栏  ›  技术社区  ›  Pim Jager

PHP的create_函数()与仅使用eval()相比

  •  4
  • Pim Jager  · 技术社区  · 16 年前

    在PHP中,有create_function()函数,它创建一个唯一的命名lambda函数,如下所示:

    $myFunction = create_function('$foo', 'return $foo;');
    $myFunction('bar'); //Returns bar
    

    do{
     $myFunction = 'createdFunction_'.rand();
    }
    while(function_exists($myFunction));
    eval("function $myFunction(\$foo) { return \$foo; }");
    $myFunction('bar'); //Returns bar
    

    create_函数真的更好吗?(除了更容易之外)

    5 回复  |  直到 16 年前
        1
  •  6
  •   too much php    16 年前

    然而

    PHP中的匿名函数实现得非常糟糕,因此您的代码实际上更好 使用它们。(谢天谢地,这将在PHP5.3中修复)。

        2
  •  5
  •   user77676 user77676    16 年前

    关于这个问题的其他一些评论:

    create_函数可以指定给一个变量,使代码的其他部分可以访问该函数,而eval只对给定的范围有用。

    eval()可能在当前作用域中运行,但函数定义仍会转储到全局命名空间中。[2]因此,无论何时定义函数,它都可以在程序中的任何其他地方访问。

    使用eval()会使全局函数列表变得混乱,而create_function()则不会

    因此,不,除了create_function()更容易之外,它似乎并不比eval()更好。

    脚注:

    [1] http://au2.php.net/manual/en/functions.user-defined.php http://au.php.net/create_function ; http://au.php.net/eval

    http://au2.php.net/manual/en/functions.user-defined.php

    [3] http://au.php.net/create_function

        3
  •  3
  •   Salty    16 年前

    http://us.php.net/create_function

    向下滚动至 示例#3使用匿名函数作为回调函数 .

        4
  •  2
  •   dreamlax    16 年前

    create_function eval 仅对给定范围有用。

        5
  •  0
  •   jmucchiello    16 年前

    (除了更容易之外)

    推荐文章