当前位置:  开发笔记 > 编程语言 > 正文

PHP的create_function()与仅使用eval()

如何解决《PHP的create_function()与仅使用eval()》经验,为你挑选了2个好方法。

在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_function真的更好吗?(除了事实上它更容易)



1> too much php..:

使用eval()会使全局函数列表混乱,create_function()不会,除此之外没有太大的区别.但是,这两种方法都需要在PHP字符串中编写函数体,这很容易出错,如果您正在处理我的项目,我会命令您使用普通语法声明一个辅助函数.

PHP中的匿名函数实现得很差,以至于您的代码实际上最好使用它们.(值得庆幸的是,这将在PHP 5.3中修复).



2> 小智..:

根据我对相关文档的理解,[1]他们都做相同的事情,create_function()只是为您提供了一个唯一的函数名称。

要解决有关此问题的其他评论:

可以将create_function分配给变量,使该函数可被代码的其他部分访问,而eval仅对给定范围有用。

eval()很有可能在当前范围内运行,但是无论如何函数定义都会转储到全局名称空间中。[2] 因此,无论何时定义一个函数,都可以在程序中的其他任何地方访问它。

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

create_function()仅返回带有新函数名称的字符串,[3]不包含某些特殊的回调类型。因此,这两种技术都会污染您的全局名称空间。

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

脚注:

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

[2] http://au2.php.net/manual/zh/functions.user-defined.php

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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有