代码之家  ›  专栏  ›  技术社区  ›  Genius

埃瓦尔什么时候(如果有的话)不是邪恶的?[复制]

  •  -2
  • Genius  · 技术社区  · 14 年前

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

    我在很多地方听到PHP的eval函数通常不是答案。根据php5.3的LSB和闭包,我们已经没有理由依赖eval或create_函数了。

    是否有任何可以想象的情况下eval是最好的(仅?)用PHP5.3回答?

    答案摘要:

    * 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 回复  |  直到 8 年前
        1
  •  0
  •   Repox    14 年前

    我会倾向于说 当计算的代码不受用户输入影响时 '-但是我不知道为什么要eval()代码,你已经应该知道了。

    在模板系统中使用eval()是我经常遇到的问题,但在我看来,它是include()或require()的一种替代方法(在这些情况下),而且似乎有理由不使用eval()来更改解决方案带来相同的结果。

        2
  •  0
  •   raveren    14 年前

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

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

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

    推荐文章