PHP全局或$ GLOBALS

Fra*_*isc 43 php variables global function

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

  1. global $myVar
  2. $GLOBALS['myVar']

谢谢.

Art*_*cto 75

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

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

关于第1点和第2点,我在这里引用 Sara Golemon:

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

  • +1实际回答被问到的问题.全局可能不是最佳实践,但有时我们必须与它们合作(WordPress,任何人?). (14认同)
  • 我同意您的看法,$ GLOBALS比“ global”要好得多 (2认同)

rek*_*o_t 31

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

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

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

$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
Run Code Online (Sandbox Code Playgroud)

  • `function writeFunction(&$ output,$ str){$ output.= $ str; ``并使用它:`writeFunction($ output,"something");` (3认同)
  • @Francisc如果你真的想,你可以通过引用传递它. (2认同)
  • 是.以这种方式编写的函数不仅限于处理全局变量.您还可以在本地范围内声明的变量上使用它们.它们也不限于使用具有特定名称的外部变量. (2认同)