PHP全局或$ GLOBALS
当我想要使用在函数之外声明的variables时,是否有最佳实践/build议?
global $myVar-
$GLOBALS['myVar']
谢谢。
你真正应该做的是把variables传递给函数,而不是使用全局。
一个示例如何通过将参数作为参考parameter passing给函数以外的variables:
function myFunc(&$myVar) { $myVar = 10; } $foo = 0; myFunc($foo); var_dump($foo); // yields 10
那么,你应该只在有限的情况下使用全局variables,而要回答你的问题:
-
global速度可能会稍微快一些(它很less会有所作为)。 -
$GLOBALS(而不是$GLOBAL)更具可读性,因为每当你看到它,就知道你正在访问/改变一个全局variables。 这可以避免令人讨厌的错误。 - 在一个函数内部,如果你想取消一个全局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 ,所以决定什么看起来更好。