【发布时间】:2014-01-21 13:54:57
【问题描述】:
我有一个关于 foreach 循环的问题,它与我正在使用 DOM 开发的情景 XML 解析器有关(本质上,它在 XML 中查找一些硬编码的值)。有谁知道实际上没有被调用的 foreach 循环对系统性能的影响?
仅供参考,我正在查看至少两种离散类型的 XML 文件,每种类型本身都有许多循环,我想使用相同的解析文件来查看每个文件。
因此,例如,它会查看具有一个功能的树,然后查看具有另一个功能的树。运行一个 .php 文件会产生什么结果,该文件包含响应两者的信息,但只是适当地选择一个或另一个?
例如,如果我调用 foreach($foo as $bar),但没有 $bar,那么将在 foreach 循环中运行的代码会发生什么?我很确定它会输出一个错误(尽管这会在报告方面被抑制),但是 PHP 的性能会因为它解析其中的代码而受到影响吗?
我可能有点不清楚;我可能在某处使用了错误的术语,所以我将做一个总结:
涉及不存在的关联数组的 foreach 循环是否会对性能产生影响。
作为参考,我想做一些类似于本页清单 2 下示例的操作:http://www.ibm.com/developerworks/library/os-xmldomphp/
如果输入“清单 2”示例的 XML 文件中没有书籍,是否会出现重大问题,或者 PHP 是否会很好地继续前进(对我而言,非致命错误也很重要),或者会性能受到影响?
【问题讨论】:
-
“如果我调用 foreach($foo as $bar),但没有 $bar”——这没有任何意义。
$bar之所以出现,只是因为 foreach 循环正在对数据进行操作。您可能意思是如果$foo是一个空数组怎么办。 -
和往常一样:您在这里关心的是“微优化”,在 99.999…99% 的实际用例中根本不会产生任何相关的差异。
-
以两种方式实施,衡量差异,然后选择适合您的性能要求的方法。
-
也许我应该更清楚一点,我实际上将使用关联数组。我不确定这有什么区别(如果有的话),但我有 20/30 基于案例的 foreach 循环,即“foreach 对象作为对象 => 要求”。至于进行手动测试,我主要担心的是我真的不知道我的最终性能要求可能是什么,我也没有足够的经验知道我的测试是真正严格的。我希望开发一些其他人可能会在他们自己的服务器上使用的东西,这可能是完全不同的环境。
-
如果您没有明确的性能要求,那么性能可能是在其他约束条件下最好的。例如,通常提高性能会降低可维护性,并且可能不希望(缺少需求)降低可维护性以实现边际性能改进。
标签: php performance loops foreach