我可以将所有php全局变量拉入函数的本地范围吗?

时间:2014-08-07 16:37:42

标签: php function scope global-variables

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

<?php
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;

    $b = $a + $b;
} 

Sum();
echo $b;
?>

如果有很多全局变量怎么办?我只想让它们全部在函数内局部作用?如何在不在每个函数开头维护一长串全局声明的情况下执行此操作?我并不关心最佳做法,也不关心它可能被视为危险的所有原因。

2 个答案:

答案 0 :(得分:2)

你为什么不这样做:

$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;

然后更通用,能够接受不同的参数,或者两个以上的参数,并且在很多情况下都很有用。

答案 1 :(得分:1)

理想情况,您的功能所需的一切都应该在参数中。

function Sum($a, $b) {
  return $a + $b;
}

如果你真的无法避免引用函数范围之外的变量,你有几个选择:

使用$ GLOBALS数组:

function Sum() {
  return $GLOBALS['a'] + $GLOBALS['b'];
}

使用global关键字:

function Sum()
  global $a, $b;
  return $a + $b;
}

使用"anonymous" function并注入全局

$Sum = function() use ($a, $b) {
  return $a + $b;
}

$result = $Sum();

如果您想使用全局的功能声明的范围内的变量,匿名函数会更有用。

extract()来自$GLOBALS

function Sum() {
  extract($GLOBALS);
  return $a + $b;
}

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

但严重,尽可能参数化。