我可以将所有php全局变量拉入函数的局部作用域吗?


Can I pull all php global variables into the function's local scope?

为了在函数外使用变量,我必须这样做:

<?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;
}

最后一个选项将拉入所有全局变量,这似乎是你正在寻找的。

但说真的,尽可能地参数化。