如何解决这个几乎很容易的PHP create_function?

wi3ka0sx  于 2022-12-21  发布在  PHP
关注(0)|答案(1)|浏览(119)

我如何转换另一个create_function。下面这个

return create_function('$f,$e=null', "return ($parsed_tpl);");

$e=null;
return function($f,$e) { return ($parsed_tpl); };

return function($f,$e=null;) { return ($parsed_tpl); };

但两个都不管用。
以上我都试过了。

tktrz96b

tktrz96b1#

原始代码中需要注意的关键部分是:

"return ($parsed_tpl);"

注意双引号,表示在将变量传递给create_function之前,变量将在字符串 * 中展开,然后 expanded 形式将形成函数的主体。
换句话说,每次创建的函数的实际代码都完全不同--它不仅会 * 返回 * 字符串,还会 * 将其作为PHP代码执行 *。
要在当前PHP中实现相同的效果,需要使用eval函数:

return eval("return ($parsed_tpl);");

你的尝试也犯了两个错误:

  • $e=null不是赋值,它是参数的默认值;它不需要分号
  • 必须使用use关键字“捕获”$parsed_tpl变量,才能在函数中使用它

格式如下:

$my_anonymous_function = 
    function($some_param, $next_param='default value', $another='another default')
    use ($something_captured, $something_else) {
        /* body of function using those 5 variables*/
    };

相关问题