我刚刚在PHP中发现了一些非常奇怪的东西.
如果我通过引用将变量传递给函数,然后在其上调用函数,那就非常慢.
如果循环遍历内部函数调用且变量很大,则它可能比通过值传递变量慢许多个数量级.
例:
<?php
function TestCount(&$aArray)
{
$aArray = range(0, 100000);
$fStartTime = microtime(true);
for ($iIter = 0; $iIter < 1000; $iIter++)
{
$iCount = count($aArray);
}
$fTaken = microtime(true) - $fStartTime;
print "took $fTaken seconds\n";
}
$aArray = array();
TestCount($aArray);
?>
Run Code Online (Sandbox Code Playgroud)
这在我的机器上运行大约需要20秒(在PHP 5.3上).
但是,如果我将函数更改为按值传递(即function TestCount($aArray)代替function TestCount(&$aArray)),则它会在大约2毫秒内运行 - 实际上要快10,000倍!
对于其他内置函数(例如strlen用户定义的函数)也是如此.
这是怎么回事?