类和函数PHP中的全局变量

时间:2013-03-06 14:38:37

标签: php function globals

我在另一个函数中读取一个函数中定义的变量时遇到了麻烦。 我有:

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。 感谢名单

5 个答案:

答案 0 :(得分:0)

变量$a在类

中应为a property

答案 1 :(得分:0)

在您的代码中,您没有为$a分配值。

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

答案 2 :(得分:0)

您永远不会运行test->aa()a分配值。

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

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

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

这是代码尝试这个..

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


?>