PHP中全局变量和函数参数之间的优缺点是什么?

对不起,我是一个初学者,我无法确定这是一个多好的问题,也许这对你们中的一些人来说听起来非常明显。

如果我们下面用的这两个是一样的,哪个更好?

function doSomething ($var1,$var2,..){
    ...
}

function doSomething (){
    global $var1,$var2,..;
    ...
}

通过我们的使用,我的意思是我知道在第二种情况下,我们也可以改变全局变量的值。但是如果我们不需要这样做呢,这是编写这个函数的更好方法?传递变量是否比在函数中宣布全局变量占用更少的内存?


答案 1

内存使用是一个微不足道的问题。更重要的是,代码易于遵循并且没有...不可预测的...结果。从这个角度来看,添加全局变量是一个非常糟糕的主意,IMO。

如果您担心内存使用情况,要做的是

function doSomething (&$var1, &$var2,..) {
   ...
}

这将通过引用传递变量,而不会在内存中创建它们的新副本。如果在函数执行期间修改它们,则这些修改将在执行返回给调用方时反映出来。

但是,请注意,出于记忆原因,即使这样也是非常不寻常的。使用按引用通常的原因是出于我上面列出的原因(为调用方修改它们)。要走的路几乎总是很简单

function doSomething ($var1, $var2) {
    ...
}

答案 2

避免使用全局变量,而是使用参数中传递变量的方法。根据程序的大小,性能可以忽略不计。

但是,如果您关心性能,这里有一些关于局部变量(函数内定义的变量)的全局变量性能的关键事项。

  • 递增全局变量比局部变量慢 2 倍。
  • 仅仅声明一个全局变量而不在函数中使用它也会减慢速度(与增加局部变量的量大致相同)。PHP 可能会检查全局是否存在。

此外,如果全局变量在代码中的其他位置被更改,则全局变量会增加使用错误值的风险。


推荐