Bab*_*ker 3 php parameter-passing pass-by-reference pass-by-value
我问这个问题,因为我了解到在编程和设计中,你必须有充分的理由做出决定.我是PHP学习者,我在这里的十字路口,我使用简单的增量试图得到我要求的东西.我当然不是在这里开始讨论引用的优点/缺点,但是当涉及到php时,这是更好的编程实践:
function increment(&$param) {
++$param;
}
Run Code Online (Sandbox Code Playgroud)
与
function increment($param){
return ++$param;
}
$param = increment($param);
Run Code Online (Sandbox Code Playgroud)
Bil*_*win 10
首先,引用不是指针.
我在他的回答中尝试了@John给出的代码,但结果很奇怪.结果是microtime()返回一个字符串.算术是不可靠的,我甚至在某些运行中得到了负面结果.应该使用microtime(true)将值作为浮点值.
我添加了另一个没有函数调用的测试,只是递增变量:
<?php
$param = 1;
$start = microtime(true);
for($i = 1; $i <= 1000000; $i++) {
$param++;
}
$end = microtime(true);
echo "increment: " . ($end - $start) . "\n";
Run Code Online (Sandbox Code Playgroud)
结果在我的机器上,Macbook 2.4GHz运行PHP 5.3.2.
因此,通过引用传递似乎有5.3%的性能优势,但完全避免函数调用有81%的性能优势.
我想增加一个整数的例子是任意的,而OP实际上是在询问通过引用传递的一般优势.但我只是提供这个例子来证明单独的函数调用比传递参数的方法产生更多的开销.
因此,如果您正在尝试决定如何微观优化参数传递,那么您就是明智而且愚蠢.
还有其他原因可以避免引用.虽然它们可以简化几种算法,尤其是当您操作两个或多个必须具有相同基础数据的数据结构时: