【问题标题】:When (if ever) is eval NOT evil? [duplicate]什么时候(如果有的话) eval 不是邪恶的? [复制]
【发布时间】:2010-11-09 07:55:50
【问题描述】:

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

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

在 PHP 5.3 中是否存在 eval 是最佳(唯一?)答案的可能情况?

这个问题不是关于 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)

【问题讨论】:

  • 男人。此处已存在具有完全相同标题的主题。当你写这篇文章时,它肯定已经展示给你了。
  • Thnx 老兄,我从那个帖子里得到了答案......
  • @MSP:逐字复制这个问题有什么意义?你是为代表做的吗?

标签: php eval


【解决方案1】:

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

在模板系统中使用 eval() 是我偶然发现的很多次,但在我看来,它是 include() 或 require() 的替代方法(在这些情况下),改变解决方案可以在不使用 eval() 的情况下带来相同的结果。

【讨论】:

    【解决方案2】:

    克服 PHP 的缺点。

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 2013-08-18
      • 2011-02-04
      • 1970-01-01
      • 2011-04-28
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多