$GLOBALS['current_view']
和global $current_view
,您更喜欢哪个?为什么?
答案 0 :(得分:10)
两者都没有,将参数传递给方法。每当你使用全球化时,上帝都会杀死一只小猫。
答案 1 :(得分:3)
如果我必须使用全局变量,并且像瘟疫那样避免它们,我使用全局$ current_view。我只是喜欢总是有一个本地范围的变量而不是依赖于超级全局变量。但我认为这是一个偏好问题。
答案 2 :(得分:3)
就个人而言,我更喜欢$GLOBALS['glob']
语法,因为我可以复制粘贴代码,而不必担心将变量声明为全局变量。请记住,您应该尽量保持全局变量(可能只是全局配置指令,甚至是......)。
然而,这两种方法并不完全是同义词;有一点点差异:
function func() {
var_dump($GLOBALS['glob']);
}
function func2() {
global $glob;
var_dump($glob);
}
如果全局'glob'不存在,第一个将发出通知。第二个不会。
在第一种情况下,将$GLOBALS['glob']
作为参数发送编译为:
3 FETCH_R global $0 'GLOBALS'
4 FETCH_DIM_R $1 $0, 'glob'
您在读取上下文中提取GLOBALS
及其索引glob
;没有创建变量。
第二个编译为
compiled vars: !0 = $glob
...
2 FETCH_W global lock $0 'glob'
3 ASSIGN_REF !0, $0
您正在创建对全局glob
的引用,因此如果它不存在则会隐式创建。
此外:
function func_unset() {
unset($GLOBALS['glob']);
}
function func2_unset() {
global $glob;
unset($glob);
}
函数func()
实际上将取消设置全局,func2_unset
只会破坏创建的引用。
请注意func2
非常类似于:
function func3() {
$glob =& $GLOBALS['glob'];
}
然而,这个可能效率较低。它编译为
2 FETCH_W global $0 'GLOBALS'
3 FETCH_DIM_W $1 $0, 'glob'
4 ASSIGN_REF !0, $1
答案 3 :(得分:0)
静态类ftw
class View {
private static $current = null;
public static function get_current() {
return self::$current;
}
}