我有一个关于foreach循环的问题,我正在研究使用DOM的情境XML解析器(实质上,它在XML中寻找一些硬编码的值)。有没有人知道foreach循环的系统性能影响实际上并没有被调用?
仅供参考,我正在查看至少两种离散类型的XML文件,每种文件本身都有许多循环,我想使用相同的解析文件来查看每个文件。
因此,例如,它会查看具有一个函数的树,然后查看另一个树。运行.php文件的结果是什么,该文件包含响应两者的信息,但只是恰当地选择其中一个?
例如,如果我调用foreach($ foo为$ bar),但没有$ bar,那么在foreach循环中运行的代码会发生什么?我很确定它会输出一个错误(虽然这会在报告方面被抑制),但PHP的性能会因为它解析其中的代码而受到影响吗?
我可能有点不清楚;我可能在某个地方使用了错误的术语,所以我将做一个总结:
涉及不存在的关联数组的foreach循环是否会对性能产生影响。
作为参考,我想在此页面上执行与清单2中的示例类似的操作:http://www.ibm.com/developerworks/library/os-xmldomphp/
如果XML文件中没有书籍输入“清单2”示例,是否会出现重大问题,或者PHP会简单地移动(非致命错误对我来说很好),或者性能受到了打击?
答案 0 :(得分:1)
我对这种情况的理解是,它实际上永远不会在foreach()
循环内部进行执行。
但是,代码在磁盘空间方面占用的实际字节数将被加载到内存中,以便在成功输入foreach()
我个人在一个出现所有错误的环境中开发,这样我就可以确保我的代码在生产中非常坚固。
如果我期待一个数组或对象,那么我通常会实现这个:
// check for the existence of $foo and make sure it is loop-able
// being loop-able means $foo is either and array or object and contains at least one item/element
if((is_array($foo) || is_object($foo)) && count($foo) > 0)
{
foreach($foo as $bar)
{
}
}
总体而言,您的问题/关注与微优化一致,当您进行微优化时,没有人会赢。只需确保您的代码易于为未来的开发人员理解,并在必要时重新考虑它。