何时在 PHP 中按引用传递

2022-08-30 13:04:45

我想知道当您只读取变量时,按引用传递是很好的做法,或者它是否应该始终作为值传递。

引用传递示例:

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

function &do_my_hash(&$value){
   return md5($value);
}

按值传递的示例:

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

function do_my_hash($value){
   return md5($value);
}

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

循环示例:

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

答案 1

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

在你提供的示例中,你的函数不会修改你传递给它的值;所以,我不会使用引用。do_my_hash

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

人们使用引用的另一个原因是,他们认为它使代码更快。但这是错误的。更糟糕的是:引用大多使代码变慢!是的,引用通常会使代码变慢 - 对不起,我只需要重复这一点来使其清晰。

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


答案 2

PHP尽可能多地使用写入时复制(只要它通常会提高性能),因此使用引用不会给你带来任何性能优势;它只会伤害。仅当确实需要引用时才使用它们。来自 PHP 手册:

不要使用按引用返回来提高性能。引擎将自动自行优化。仅当您有有效的技术原因时才返回引用。


推荐