我可以通过以下两种方式之一更改我的函数中的$var
:通过引用或使用global
关键字传递它。
$var1 = 10;
function test1() {
global $var1;
$var1++;
}
function test2(&$var) {
$var++;
}
两种方法都有相同的结果,但它们之间有什么区别吗?哪一个更受欢迎哪一个更快?
答案 0 :(得分:5)
<强> 1。没有一个是首选。
除非您有特殊原因,否则首选
$var1 = 10;
$var1 = test3($var1);
function test3($var)
{
return $var + 1;
}
在程序的不同部分之间引入耦合(如果使用global
)是您应该总是合理地避免的事情。
此外,如果没有具体原因让你的函数通过引用接受它的参数,你也应该避免这样做。只有非常微小的所有函数才能以这种方式运行,所以如果没有其他任何事情,那么使用这些代码的开发人员之间就不会产生混淆。
<强> 2。你不需要考虑哪一个更快。
除非您在真实场景下对您的应用程序进行了分析,并且发现此函数是一个瓶颈(当然它永远不会以这种简单的形式出现),然后以编写清晰且可维护的代码为代价来优化性能是不仅毫无意义,而且还有害。
作为奖励,我应该提到使用引用可能实际上使函数 slower 。
答案 1 :(得分:1)
由于全局变量会污染命名空间(即可以无意中和/或使用具有相同想法的其他函数),因此最好使用引用。
但是,在许多情况下(数据结构更复杂),您应该使用objects代替,如下所示:
class Counter {
private $val = 10;
public function increment() {
$this->val++;
}
}
任何这些解决方案的速度都无关紧要,并且会因任何实际计算而相形见绌。
答案 2 :(得分:1)
首选方法是避免全局变量。原因是如果你把一个变量放在全局范围内,你将失去对它的控制 - 因为项目增长,你可能会忘记你的全局变量的名称是什么,你可以在某个地方意外地覆盖它,给你自己带来了令人难以置信的头痛。
从性能的角度来看 - 引用速度更快,使用起来也更安全,因为你在方法的签名中定义了引用是否被使用,使得实际的函数调用变得容易,因为你不必传递变量通过明确引用。