PHP全局或$ GLOBALS

当我想要使用在函数之外声明的variables时,是否有最佳实践/build议?

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

谢谢。

你真正应该做的是把variables传递给函数,而不是使用全局。

一个示例如何通过将参数作为参考parameter passing给函数以外的variables:

 function myFunc(&$myVar) { $myVar = 10; } $foo = 0; myFunc($foo); var_dump($foo); // yields 10 

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

  1. global速度可能会稍微快一些(它很less会有所作为)。
  2. $GLOBALS (而不是$GLOBAL )更具可读性,因为每当你看到它,就知道你正在访问/改变一个全局variables。 这可以避免令人讨厌的错误。
  3. 在一个函数内部,如果你想取消一个全局variables,你必须使用unset($GLOBALS['varname']) ,而不是global $varname; unset($varname); global $varname; unset($varname);

关于第1点和第2点,我会在这里引用萨拉·戈莱蒙(Sara Golemon)的话:

这对于你使用$GLOBALS数组意味着什么? 没错, global关键字在技术上更快。 现在,我想在这里真正清楚一件事情。 使用全局variables作为本地化的编译variables给出的次要速度可供性需要认真权衡五年来查看代码的可维护性,并且知道$foo来自全局范围。 something_using($GLOBALS['foo']); 总是会比global $foo; /* buncha code */ something_using($foo);更清楚地告诉你global $foo; /* buncha code */ something_using($foo); global $foo; /* buncha code */ something_using($foo); 不要一分钱一分钱,笨蛋..

我会去你的function顶部的全球。 这样,你可以很容易地看到使用全局variables。

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

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

有些人认为它比使用$GLOBALS更快,但事实并非如此。 如果只使用一次variables, $GLOBALS会更快,因为您不会浪费时间进行分配。

但是,如果多次使用该variables,则使用global (或等效赋值)会更快,因为只能在var数组中search数据一次。

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