在PHP中使用引用

我问这个问题,因为我了解到在编程和设计中,你必须有充分的理由做出决定.我是PHP学习者,我在这里的十字路口,我使用简单的增量试图得到我要求的东西.我当然不是在这里开始讨论引用的优点/缺点,但是当涉及到php时,这是更好的编程实践:

function increment(&$param) {
      ++$param;
}

function increment($param){
 return ++$param;
}

$param = increment($param);
最佳答案
首先,references are not pointers.

我在他的回答中尝试了@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";

结果在我的机器上,Macbook 2.4GHz运行PHP 5.3.2.

>通过引用传递的函数调用:2.14秒.
>通过值传递的函数调用:2.26秒.
>没有函数调用,只是裸增量:0.42秒.

因此,通过引用传递似乎有5.3%的性能优势,但完全避免函数调用有81%的性能优势.

我想增加一个整数的例子是任意的,而OP实际上是在询问通过引用传递的一般优势.但我只是提供这个例子来证明单独的函数调用比传递参数的方法产生更多的开销.

因此,如果您正在尝试决定如何微观优化参数传递,那么您将是明智而且愚蠢的.

还有其他原因可以避免引用.虽然它们可以简化几种算法,尤其是当您操作两个或多个必须具有相同基础数据的数据结构时:

>它们使功能具有副作用.一般来说,你应该避免使用带副作用的函数,因为它们会使程序更难以预测(例如,“好吧,这个值是如何实现的?是否有任何函数修改了它的参数?”)
>它们会导致错误.如果将变量作为引用,则必须记住在为其赋值之前取消设置它,除非您想要更改引用集的基础值.在通过引用运行foreach循环然后重新使用循环变量之后,这种情况经常发生.

转载注明原文:在PHP中使用引用 - 代码日志