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
,所以决定什么看起来更好。