PHP全局或$ GLOBALS

时间:2010-08-26 09:39:17

标签: php variables function global

当我想在使用时使用在函数外声明的变量时,是否有最佳实践/建议:

  1. global $myVar
  2. $GLOBALS['myVar']
  3. 谢谢。

5 个答案:

答案 0 :(得分:73)

嗯,你应该只在有限的情况下使用全局变量,但要回答你的问题:

  1. global可能稍微快一些(它很少有所作为)。
  2. $GLOBALS(不是$GLOBAL)更具可读性,因为每次看到它,您就知道您正在访问/更改全局变量。这对于避免令人讨厌的错误至关重要。
  3. 在函数内部,如果要取消设置全局变量,则必须使用unset($GLOBALS['varname']),而不是global $varname; unset($varname);
  4. 关于第1点和第2点,我将quote Sara Golemon在这里:

      

    这对您使用$GLOBALS数组意味着什么?没错,global关键字在技术上更快。现在,我想在这里清楚一点。使用全局变量作为本地化[编译变量]给出的次要速度可能需要与在五年内查看代码并且知道$foo来自全局范围的可维护性进行严格权衡。 something_using($GLOBALS['foo']); global $foo; /* buncha code */ something_using($foo);总是会比{{1}}更清楚地告诉你,不要吝啬和愚蠢......

答案 1 :(得分:31)

你应该做的是将变量传递给函数而不是使用全局。

如何通过将函数作为参考参数传递来更改函数外部的变量的示例:

function myFunc(&$myVar)
{
    $myVar = 10;
}

$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10

答案 2 :(得分:3)

我会在你的功能的顶部去全球。通过这种方式,您可以轻松查看使用的全局变量。

答案 3 :(得分:3)

我说,建议不要在OOP中使用Globals,应该总是有更好的方法

答案 4 :(得分:0)

global $var;相当于$var =& $GLOBALS['var']

有人建议它比使用$GLOBALS更快,但并不一定如此。如果您只使用变量一次,$GLOBALS会更快,因为您不会浪费时间进行分配。

但是,如果您多次使用该变量,则使用global(或等效赋值)会更快,因为只需在数组中搜索var键一次。

这就是速度。但是,速度差异非常小,可读性更重要。但是,不同的人对可读性有不同的偏好 - 我更喜欢global,其他一些在这里回答的人更喜欢$GLOBALS,所以由您来决定看起来更好。