0

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

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。谢谢

4

5 回答 5

0

你永远不会跑来test->aa()a.

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

在这种情况下$ccc仍将为 null,因为您正在回显$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);
于 2013-03-06T14:44:56.867 回答
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);
?>
于 2013-03-06T14:45:46.140 回答
0

变量$a应该是类内的属性

于 2013-03-06T14:40:47.797 回答
0

在您的代码中,您绝不会为$a.

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

于 2013-03-06T14:41:16.470 回答
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);


?>
于 2013-03-06T15:07:44.627 回答