有没有办法让所有变量全局?使所有变量全局,PHP
回答
你试图做什么并不重要,但这是一个不好处理的方法。只要将变量作为参数传递给函数,或者在函数中声明它们就可以了。
但简而言之,没有很多全球性声明没有简单的方法。
快速和肮脏的方式:
$GLOBALS += get_defined_vars();
我不知道这是黑客便携式(它适用于PHP 5.3.1),我怀疑对象被克隆。
对象不应该被克隆,但它不适用于锯齿,但我会说它非常接近,其他的东西有更多的开销:http://stackoverflow.com/a/10980563/367456(为完整性原因添加了答案) – hakre 2012-06-11 12:59:06
,我认为这可以帮助foreach($GLOBALS as $name => $value) global $$name;
把它里面的功能,你就会有所有定义的变量可见参数
要导入所有的全局变量含。超全局变量和参数到功能范围冲突名称:
extract($GLOBALS, EXTR_REFS | EXTR_SKIP);
的问题是这里的superglobals。您可能要排除他们,这里是一个列表(PHP 5.2):
/**
* PHP Superglobals
*/
array (
1 => 'GLOBALS',
2 => '_ENV',
3 => 'HTTP_ENV_VARS',
4 => '_POST',
5 => 'HTTP_POST_VARS',
6 => '_GET',
7 => 'HTTP_GET_VARS',
8 => '_COOKIE',
9 => 'HTTP_COOKIE_VARS',
10 => '_SERVER',
11 => 'HTTP_SERVER_VARS',
12 => '_FILES',
13 => 'HTTP_POST_FILES',
14 => '_REQUEST',
15 => 'HTTP_SESSION_VARS',
16 => '_SESSION',
)
你跟get_defined_vars
获取参数变量名。
这也是相反的原因不太复杂,get_defined_vars
不返回超全球变量,只有局部变量。
global
创建对全局范围变量的引用,所以它实际上是一个局部变量,它是具有相同名称的全局变量的别名。也有一些本地变量的冲突出口,因此一些预先警告像深奥的变量名应采取:
foreach(get_defined_vars() as ${"\x00\x00"} => ${"\x00\x01"})
{
$GLOBALS[${"\x00\x00"}] =&$${"\x00\x00"};
}
注意,喜欢globals
的$GLOBALS
超全局数组包含全局变量的引用一样,所以这将创建引用这里也是如此。如果您通过global
或&$GLOBALS[...]
或extract
进口,请特别注意。或者,如果你有局部变量是别名私有类成员(不这样做;)):
例/ Demo:
<?php
/**
* Make all variables global, PHP
* @link http://stackoverflow.com/q/1909647/367456
*/
error_reporting(~0);
function bar($goo = 1)
{
global $foo;
$foo++;
$baz = 3;
foreach(get_defined_vars() as ${"\x00\x00"} => ${"\x00\x01"})
{
$GLOBALS[${"\x00\x00"}] =&$${"\x00\x00"};
}
}
$foo = 1;
bar();
echo '$goo: ', var_dump($goo); # int(1)
echo '$foo: ', var_dump($foo); # int(2)
echo '$baz: ', var_dump($baz); # int(3)
你是一个勇敢的勇敢的人;-) +1 – PeeHaa 2012-06-11 13:17:09
你可以简单的使他们成为一个参考$ GLOBALS
foreach($GLOBALS as $k => $v)
$$k=&$GLOBALS[$k];
解释代码:
$ GLOBLAS是一个超全局VA riable(随处可见)。Basicly它包含了所有变量
$$意味着你写
有点怪异外语所以在这里解释变量的值的名称的变量是一个例子:
$color='blue';
$blue='foo';
echo $$color;
将输出
foo
$k=& $v;
意味着$ k为$ V
参考这实在不是一个很好的做法,使所有变量的全局相对于安全性。要将变量添加为全局变量,每次要访问时都必须添加GLOBAL关键字。另一种方法是使用数组$ GLOBAL。
- 1. PHP所有函数变量全局
- 2. PHP使用全局变量
- 3. PHP全局变量
- 4. 打印所有全局变量/局部变量?
- 5. 如何获得所有全局变量
- 6. 如何重置所有全局变量?
- 7. C#全局变量为所有形式
- 8. 锂PHP全局变量
- 9. PHP封装全局变量
- 10. isset()和PHP全局变量
- 11. 用PHP全局变量
- 12. PHP类和全局变量
- 13. PHP:全局变量范围
- 14. 在其他全局变量之间匹配PHP全局变量
- 15. 变量名称的PHP全局变量
- 16. php - 所有类功能中的全局变量
- 17. 使用PHP初始化全局变量
- 18. 在PHP中使变量全局化?
- 19. WordPress的 - 使变量可用于所有主题文件(没有全局变量)
- 20. 使用全局变量将全局变量递归到迭代
- 21. 全局变量
- 22. 全局变量
- 23. 全局变量?
- 24. 全局变量
- 25. 全局变量
- 26. 全局变量
- 27. 全局变量
- 28. 全局变量
- 29. PHP:使用全局变量时会重新定义变量吗?
- 30. 变量全局变量?
请不要:( – 2009-12-15 19:36:26
如果在通用函数中设置变量全局实际上不切实际,您可以始终使用$ GLOBALS数组(即$ GLOBALS ['var_name']) – Bretticus 2012-03-29 17:28:48