使所有变量成为全局变量,PHP
有没有一种方法可以使所有变量都是全局的?不管你想做什么,但这是一种不好的方法。您最好将变量作为参数传递给函数,或者在函数中声明它们为全局变量 但简言之,如果没有大量的全局声明,就没有简单的方法可以做到这一点。快速而肮脏的方法:使所有变量成为全局变量,PHP,php,variables,global-variables,global,Php,Variables,Global Variables,Global,有没有一种方法可以使所有变量都是全局的?不管你想做什么,但这是一种不好的方法。您最好将变量作为参数传递给函数,或者在函数中声明它们为全局变量 但简言之,如果没有大量的全局声明,就没有简单的方法可以做到这一点。快速而肮脏的方法: $GLOBALS += get_defined_vars(); 我不知道这个黑客是否是可移植的(它在PHP5.3.1上工作),我怀疑对象是克隆的。我认为这有助于foreach($GLOBALS as$name=>$value)global$$name将其放入函数中,所有
$GLOBALS += get_defined_vars();
我不知道这个黑客是否是可移植的(它在PHP5.3.1上工作),我怀疑对象是克隆的。我认为这有助于
foreach($GLOBALS as$name=>$value)global$$name代码>将其放入函数中,所有定义的变量都将可见以将所有全局变量(包括超全局变量和参数冲突名称)导入函数范围:
extract($GLOBALS, EXTR_REFS | EXTR_SKIP);
问题出在这里。您可能希望排除它们,下面是一个列表(PHP5.2):
您可以使用获取参数变量名
这也是为什么相反的方法不那么复杂的原因,它不返回超全局变量,只返回局部变量
global
创建对全局范围变量的引用,因此它实际上是一个局部变量,是同名全局变量的别名。此外,一些本地变量在导出时会发生冲突,因此应采取一些预防措施,如深奥的变量名:
foreach(get_defined_vars() as ${"\x00\x00"} => ${"\x00\x01"})
{
$GLOBALS[${"\x00\x00"}] =&$${"\x00\x00"};
}
请注意,与globals
一样,$globals
超全局数组也包含对全局变量的引用,因此也会在此处创建引用。如果您通过global
或和$GLOBALS[…]
或上述提取
进行导入,则特别需要使用此选项。或者,如果您的局部变量是私有类成员的别名(不要这样做;):
示例/:
您可以简单地将它们作为$GLOBALS的引用
foreach($GLOBALS as $k => $v)
$$k=&$GLOBALS[$k];
守则解释:
$GLOBLAS是一个超全局变量(随处可见)。基本上,它包含所有变量
$$表示具有您编写的变量值名称的变量
用外语解释有点奇怪,下面是一个例子:
$color='blue';
$blue='foo';
echo $$color;
将输出
foo
这意味着$k是对$v的引用。这并不是一个好的做法,因为它不能使所有变量都是全局的。要将变量添加为全局变量,您必须在每次访问时添加全局关键字。另一种方法是使用数组$GLOBAL。如果在泛型函数中设置变量GLOBAL确实不切实际,则始终可以使用$GLOBALS数组(即$GLOBALS['var_name'])对象,但不应克隆该对象,但它不能使用别名。但是我想说它非常接近,其他东西有更多的开销:(出于完整性原因添加了答案)重要注意:这不会覆盖任何现有的全局变量,但只添加以前不存在的变量,因为。Doforeach(将变量()定义为$k=>v)$GLOBALS[$k]=$v代码>如果要覆盖。或者更好:永远不要这样做。
$color='blue';
$blue='foo';
echo $$color;
foo
$k=& $v;