我从2005年发现了一个错误报告,准确地描述了此问题:http :
//bugs.php.net/bug.php?id=34540
因此,问题似乎在于,当将引用的值传递给不接受引用的函数时,PHP需要复制它。
可以通过以下测试代码来证明这一点:
<?phpfunction CalledFunc(&$aData){ // Do nothing}function TestFunc(&$aArray){ $aArray = range(0, 100000); $fStartTime = microtime(true); for ($iIter = 0; $iIter < 1000; $iIter++) { CalledFunc($aArray); } $fTaken = microtime(true) - $fStartTime; print "took $fTaken secondsn";}$aArray = array();TestFunc($sData);?>这跑得快,但如果你改变
function CalledFunc(&$aData)对
functionCalledFunc($aData)你会看到一个类似的放缓到
count的例子。
这让我很担心,因为我已经编码PHP了很长时间,而且我对这个问题一无所知。
幸运的是,有一个简单的解决方法适用于许多情况-在循环中使用临时局部变量,最后复制到参考变量。



