【问题标题】:Get variables from the outside, inside a function in PHP从外部获取变量,在 PHP 中的函数内部
【发布时间】:2011-02-20 22:19:34
【问题描述】:

我试图弄清楚如何在函数内部使用已在函数外部设置的变量。有没有办法做到这一点?我尝试将变量设置为“全局”,但它似乎没有按预期工作。

我的代码的一个简单示例

$var = '1';

function() {
    $var + 1;
    return $var;
}

我希望它返回 2 的值。

【问题讨论】:

  • 来自i want this, to return the value of 2.,我建议使用$var = function($var) { return $var + 1; }。这样,您就可以避免使用全局变量,这是一种糟糕的设计模式。

标签: php function variables global-variables


【解决方案1】:

你需要在你的函数中使用全局关键字insidehttp://php.net/manual/en/language.variables.scope.php

编辑(不好意思我忽略了这一点,感谢评论者)

...并将结果存储在某处

$var = '1';
function() {
    global $var;
    $var += 1;   //are you sure you want to both change the value of $var
    return $var; //and return the value?
}

【讨论】:

  • $var = '1'; function() { global $var; $var + 1; return $var; }
  • 呸,太简单了!无论如何,非常感谢您的快速回复!干杯伙伴!
  • 一般不建议在绝对必要的情况下使用全局
  • 即使通过global 提供访问权限,声明$var + 1; 的计算结果为2,但不会将结果存储在任何地方。尝试$var++;$var += 1;,但请注意它也会更改原始变量。
【解决方案2】:

全局变量可以解决问题,但通常最好远离。在较大的程序中,您无法确定是否存在行为,因为它们可以在整个程序中的任何位置进行更改。而且测试使用全局变量的代码变得非常困难。

另一种方法是使用类。

class Counter {
    private $var = 1;

    public function increment() {
        $this->var++;
        return $this->var;
    }
}

$counter = new Counter();
$newvalue = $counter->increment();

【讨论】:

  • +1 是一个比全局状态更好的解决方案,但如果有人只想要当前值而不增加它,那么 $var 也可能需要一个 getter
【解决方案3】:
$var = 1;

function() {
  global $var;

  $var += 1;
  return $var;
}

$var = 1;

function() {
  $GLOBALS['var'] += 1;
  return $GLOBALS['var'];
}

【讨论】:

    【解决方案4】:
    $var = '1';
    function addOne() use($var) {
       return $var + 1;
    }
    

    【讨论】:

      【解决方案5】:

      有关文档,请参阅 http://php.net/manual/en/language.variables.scope.php。我认为在您的特定情况下,您没有得到想要的结果,因为您没有将 $var + 1 操作分配给任何东西。数学是执行的,然后基本上被扔掉了。请参阅下面的工作示例:

      $var = '1';
      
      function addOne() {
         global $var;
         $var = $var + 1;
         return $var;
      }
      

      【讨论】:

        【解决方案6】:

        函数中的这一行: $var + 1 不会更改分配给 $var 的值,即使您使用 global 关键字。

        以下任何一个都可以,但是: $var = $var + 1; 或者 $var += 1;

        【讨论】:

        • 既然你没有回答这个问题,我认为这作为评论会更有意义。尽管如此,它是正确的。
        【解决方案7】:

        根据:https://riptutorial.com/php/example/2496/global-variable-best-practices最好放

        $var = '1';
        
        function($var) {
        $var + 1;
        return $var;
        }
        

        如果我错了,请纠正我。

        【讨论】:

          【解决方案8】:
          <?php
          $var = '1';
          function x ($var) {
          return $var + 1;
          }
          echo x($var); //2
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-08-19
            • 2012-07-14
            • 2014-03-01
            • 2013-11-10
            • 1970-01-01
            • 2020-01-11
            • 2021-08-20
            相关资源
            最近更新 更多