什么时候在PHP中传递引用

Vid*_*nes 31 php pass-by-reference

我想知道当你只读取一个变量时它是否是传递引用的好方法,或者它是否应该总是作为一个值传递.

传递引用的示例:

$a = 'fish and chips';
$b = do_my_hash($a);
echo $b;

function &do_my_hash(&$value){
   return md5($value);
}
Run Code Online (Sandbox Code Playgroud)

传值的示例:

$a = 'fish and chips';
$b = do_my_hash($a);
echo $b;

function do_my_hash($value){
   return md5($value);
}
Run Code Online (Sandbox Code Playgroud)

哪个更好 ?例如,如果我要运行1000轮的循环?

循环示例:

for($i = 0 ; $i < 1000 ; $i++){
   $a = 'Fish & Chips '.$i;
   echo do_my_hash($a);
}
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 46

如果你想传递一个 (所以函数不修改它),没有理由通过引用传递它:它只会让你的代码更难理解,因为人们会认为" 这个函数可以修改我的意思传递给它 - 哦,它不会修改它? "

在您提供的示例中,您的do_my_hash函数不会修改您传递给它的 ; 所以,我不会使用参考.

如果你担心性能,你应该阅读最近的博客文章:不要使用PHP引用:

人们使用引用的另一个原因是因为他们认为它使代码更快.但这是错误的.更糟糕的是:引用主要使代码变慢!是的,引用通常会使代码变慢 - 抱歉,我只需重复此操作即可明确.

实际上,这篇文章可能是一本有趣的读物,即使你不是主要关注性能;-)

  • 我在想效率.由于函数不会更改参数,因此最好通过引用传递,因为它不需要复制值.如果$ a ="bla bla bla ... [带有10.000个字符的文本...]"; ...... 10.000个字符会占用大量内存,所以不要复制它,而是通过引用发送它... (3认同)

Mat*_*hew 12

PHP尽可能地使用写时复制(只要它通常会提高性能),因此使用引用不会给您带来任何性能优势; 它只会伤害.仅在您真正需要时才使用引用.从PHP手册:

千万不能使用返回的引用,以提高性能.引擎将自动对其进行自动优化.只有在有正当技术理由的情况下才返回引用.


Cru*_*han 9

好的编程习惯总是尽可能地传递值,如果你必须修改单个值,通常最好是通过函数返回修改后的值,而不是通过引用传递值.

您可能需要通过引用传递的唯一情况是您需要修改多个值的位置.然而,这些情况往往很少见,通常应将其视为检查代码的标志,因为可能有更好的方法来解决问题.

早在早期的编程语言总是习惯于通过引用传递并且通过值传递是后来的开发来解决这个问题(你往往会产生一些模糊的错误,因为迟早会有一些程序员放入代码来修改传递的通过在某个函数或其他函数中的引用值,然后确定正确位置和修复是很棘手的 - 您往往最终会有多个,模糊的依赖项.因此,当我们的多代处理器被认为是cpu与复杂性的良好平衡以帮助清洁,可维护时,认真考虑将其作为削减几个机器周期的选项是非常不正常的.码.