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

Moh*_*mad 18 php performance function global-variables

抱歉,我是初学者,我无法确定这是一个多么好的问题,也许对你们这些人来说听起来完全是显而易见的.

如果我们使用下面这两个是相同哪个更好?

function doSomething ($var1,$var2,..){
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

function doSomething (){
    global $var1,$var2,..;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

Ark*_*ito 22

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

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

function doSomething (&$var1, &$var2,..) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

但请注意,出于记忆原因,这是非常不寻常的.使用by-reference的常见原因是我上面列出的原因(为调用者修改它们).要走的路几乎总是那么简单

function doSomething ($var1, $var2) {
    ...
}
Run Code Online (Sandbox Code Playgroud)


Ant*_*ney 14

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

但是,如果您关注性能,那么关于局部变量(函数中定义的变量)的全局变量性能需要注意一些关键事项.

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

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


Mat*_*hen 6

编写以接受参数。可维护性比微观优化重要得多。接受参数时,无法在意外的地方修改变量。