【问题标题】:Can I pull all php global variables into the function's local scope?我可以将所有 php 全局变量拉入函数的本地范围吗?
【发布时间】:2014-10-01 00:08:36
【问题描述】:

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

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

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

    $b = $a + $b;
} 

Sum();
echo $b;
?>

如果有很多全局变量,我只是希望它们都在函数内的局部范围内?如果不在每个函数的开头维护一长串全局声明,我该如何做到这一点?我不关心最佳实践,也不关心它可能被视为危险的所有原因。

【问题讨论】:

  • 全局变量表明你做错了。但如果你必须... $GLOBALS['a']
  • 是的,我想这是可能的。不过,我不想像这样遍历每个变量并为每个变量添加前缀。
  • 可以extract($GLOBALS);,但这是一个非常糟糕的主意,并且可能会中断,因为$GLOBALS本身就是一个全局变量,因此是递归的。

标签: php function scope global-variables


【解决方案1】:

你为什么不做类似的事情:

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

这样更通用,能够接受不同的参数或两个以上的参数,并且在更多情况下有用。

【讨论】:

    【解决方案2】:

    理想情况下,您的函数所需的一切都应该在一个参数中。

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

    最后一个选项将引入 所有 全局变量,这似乎正是您要寻找的。​​p>

    但是说真的,尽可能进行参数化。

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 2015-09-30
      • 1970-01-01
      • 2022-06-12
      • 2013-05-26
      • 2011-10-28
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多