何时通过PHP引用

林想知道,如果它是一个很好的做法传递引用,当你只是读一个variables,或者如果它应该总是作为一个值传递。

通过引用的示例:

$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); } 

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

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

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

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

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

PHP尽可能使用copy-on-write(只要通常会提高性能),所以使用引用不会给您带来任何性能好处; 它只会伤害。 只有在真正需要时才使用参考。 从PHP手册:

不要使用引用返回来提高性能。 引擎将自动优化它。 只有当你有合理的技术理由才能返回参考。

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

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

早期的编程语言总是用来传递引用和传值的,这是后来发展来解决这个问题的产物(你往往最终会产生一些晦涩的错误,因为迟早某些程序员会通过代码来修改传入的通过在某些函数或其他函数中的引用值,然后确定正确的位置和修复是非常棘手的 – 您最终会遇到多重,模糊的依赖关系)。 因此,当我们的多代处理器超过了被认为是cpu vs复杂性的良好折衷点的时候,认真考虑这个作为削减几个机器周期的选项是非常不正常的,以帮助干净,可维护,码。

微观优化的乐趣。 🙂

说实话,通过引用传递'正常'variables可能不会有很大的收获(除非你想影响它们在原始范围内的值)。 另外,由于PHP 5对象是通过引用自动传递的。

如果您不想在函数内部修改该值,则按引用传递没有任何好处。 我尽量使用按值传递,因为它更容易阅读,并且脚本的stream程更加一致。