什么时候(如果有的话)是eval而不是邪恶?

时间:2010-11-09 07:55:50

标签: php eval

  

可能重复:
  When (if ever) is eval NOT evil?

我听说很多地方PHP的eval功能通常不是答案。鉴于PHP 5.3的LSB和闭包,我们已经没有理由依赖eval或create_function。

是否有任何可以想象的案例,其中eval是PHP 5.3中最好的(仅?)答案?

这个问题不是关于eval是否一般是邪恶的,因为它显然不是。

答案摘要:

* Evaluating numerical expressions (or other languages "safe" subsets of PHP)
* Unit testing
* Interactive PHP "shell"
* Deserialization of trusted var_export
* Some template languages
* Creating backdoors for administers and/or hackers
* Compatibility with < PHP 5.3
* Checking syntax (possibly not safe)

2 个答案:

答案 0 :(得分:0)

我倾向于只在评估的代码不受用户输入的影响时说' - 但我不确定为什么你会eval()你应该知道的代码,然后

在模板系统中使用eval()是我经常偶然发现的事情,但在我看来,它似乎是include()或require()(在这些情况下)的替代品,似乎有可能改变解决方案可以在不使用eval()的情况下获得相同的结果。

答案 1 :(得分:0)

克服PHP的缺点。

在我们的项目中,我们需要eval来让类在自动加载中扩展动态类。

eval("class {$baseName}Model extends {$baseName}ModelParent{}");

虽然它可能看起来像代码味道,但我不会详细介绍,但这对于我们透明地支持许多略有不同的项目来说是绝对必要的一步。