【问题标题】:Global variable inside class and function PHP类和函数 PHP 中的全局变量
【发布时间】:2013-02-21 09:51:35
【问题描述】:

我无法在另一个函数中读取一个函数中定义的变量。 我有:

global $a;
class test{
    function aa($somevar){
        switch ($myvar){
        case 'value':
            global $a;
            $a = 15;
            break;
        }
    }
    function bb(){
        global $a;
        echo $a;
    }
}

$foo = new test();
$ccc = $foo->bb();

var_dump($ccc);

我得到转储结果 NULL。 谢谢

【问题讨论】:

  • 但是你无处为$aa赋值。
  • 在此代码流中的任何地方都没有为 $a 分配任何值; bb() 不返回任何内容以分配给 $ccc; aa() 打开一个不存在的变量;并且您应该尽可能避免使用 global
  • 为什么要使用全局变量而不是类成员?
  • $a 被分配在 switch $a = 15;而这个aa函数只能接受一个参数$somevar,没有别的
  • @user1756097 不,你不会调用 switch 所在的方法

标签: php function globals


【解决方案1】:

变量$a应该是类内的a property

【讨论】:

    【解决方案2】:

    在您的代码中,您不会为 $a 赋值。

    $a 的唯一赋值是在test->aa 方法中,它使用不一致的变量,因此即使被调用也永远不会赋值给$a

    【讨论】:

      【解决方案3】:

      您永远不会运行 test->aa() 来为 a 赋值。

      $foo = new test();
      $foo->aa();
      $ccc = $foo->bb();
      

      在这种情况下,$ccc 仍然为 null,因为您在 $foo->bb() 中回显 $a 而不是返回它。

      function bb() {
        global $a;
        return $a;
      }
      

      我也会远离全局变量并在类的构造上传递变量 $a。例如:

      class test {
          public $a;
      
          function __construct($a = null) {
            // pass initial var to $a if you want
            $this->a = $a;
          }
      
         function aa($somevar) {
            // reassign $a
            $this->a = $somevar;
         }
      }
      
      $foo = new test();
      $foo->aa(5);
      // or just $foo = new test(5);
      var_dump($foo->a);
      

      【讨论】:

        【解决方案4】:

        试试这个:

        class test
        {
            public $a;
            function aa($somevar)
            {
                switch ($myvar)
                {
                 case 'value':
                 $this->a = 15;
                 break;
                }
            }
            function bb()
            {        
                return $this->a;
            }
        }
        
        $foo = new test();
        $ccc = $foo->bb();
        
        var_dump($ccc);
        

        更新:

        <?php
        class test
        {
            var $a;
            function aa($somevar)
            {
                switch ($somevar)
                {
                 case 'value':
                 $this->a = 15;
                 break;
                }
            }
            function bb()
            {        
                return $this->a;
            }
        }
        
        $foo = new test();
        $foo->aa('value');
        $ccc = $foo->bb();
        
        var_dump($ccc);
        ?>
        

        【讨论】:

        • +1 用于删除全局变量。 -2 不解决初始问题($ccc 仍然为空)。 test-&gt;bb 必须返回 test-&gt;a
        【解决方案5】:

        这是代码试试这个..

        <?php
         global $a;
          class test{
        
            function aa($somevar){
               switch ($somevar){
                case 'value':
                    global $a;
                    $a = 15;
                    break;
                }
            }
        
        function bb(){
            global $a;
            echo $a;
            return $a;
        }
        }
        
        $foo = new test();
        $foo->aa('value');
        $ccc = $foo->bb();
        
        var_dump($ccc);
        
        
        ?>
        

        【讨论】:

        • 不可能,因为函数中的变量和开关不一样
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 2013-03-19
        • 2011-01-14
        相关资源
        最近更新 更多