Push a variable into global scope?
我们使用实例化并将系统关键对象放在
我们经常使用
问题是,根据我的经验和几个小时的谷歌搜索,我在PHP中没有发现任何允许您将var标记为全局变量的构造,使
我错过什么了吗?这有可能吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php function &G($name) { if(func_num_args() > 1) { $GLOBALS[$name] = func_get_arg(1); } return $GLOBALS[$name]; } G('test', 'hey'); echo G('test'); // outputs hey echo $test; // outputs hey $b =& G('test'); $b = 'hello'; echo G('test'); // outputs hello echo $test; // outputs hello |
不,但你可以用点小技巧。用与全局变量相同的名称创建一个全局函数,并让它返回全局实例。如。:
1 2 3 | function db() { return $GLOBALS['db']; } |
现在您可以将代码编写为:
1 2 3 | ... $stuffs = db()->query("select * from stuff"); ... |
您可能会认识到这是单例模式的一个变体,但在语法上更令人愉快。
其他人已经提到过它,但是您也应该首先考虑不要使用全局对象。我通常更喜欢在需要的地方传递对象(依赖注入)。不过,我并没有过度发现注册模式。
您可能不想将所有内容都放在
然而,拥有许多全局变量/对象是设计不良和高耦合的标志。使用像
除了middus指出的注册表概念外,还有一些方法和概念,您可以在这个问题的答案中找到其中的一些:
在PHP项目中,如何组织和访问助手对象?
1 | global $variable; //? |