为了在函数外使用变量,我必须这样做:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
如果有很多全局变量,我只是希望他们都是局部作用域内的函数怎么办?如何做到这一点,而不需要在每个函数的开头维护一长串全局声明?我不关心最佳实践,也不关心所有可能被认为是危险的原因。
你为什么不这样做呢?
$a = 1;
$b = 2;
function Sum()
{
$args = func_get_args();
$result = 0;
foreach($args as $arg) {
$result += $arg;
}
return $result;
}
$b = Sum($a, $b);
echo $b;
则更通用,能够接受不同的参数,或两个以上的参数,并在更多的情况下有用。
理想情况下,函数需要的所有内容都应该包含在参数中。
function Sum($a, $b) {
return $a + $b;
}
如果你真的不能避免引用函数作用域之外的变量,你有几个选择:
使用$GLOBALS数组:
function Sum() {
return $GLOBALS['a'] + $GLOBALS['b'];
}
使用global
关键字:
function Sum()
global $a, $b;
return $a + $b;
}
使用一个"匿名"函数并注入全局变量
$Sum = function() use ($a, $b) {
return $a + $b;
}
$result = $Sum();
如果你想处理函数声明范围内不是全局的变量,匿名函数会更有用。
extract() from $GLOBALS
function Sum() {
extract($GLOBALS);
return $a + $b;
}
最后一个选项将拉入所有全局变量,这似乎是你正在寻找的。
但说真的,尽可能地参数化。