PHP:OOP中的变量范围?

时间:2010-06-29 16:48:08

标签: php oop scope

这是我的代码:

class Manual extends controller {

    function Manual(){
        parent::Controller();
     $myVar = 'blablabla';


    }

    function doStuff(){
        echo $myVar; // Doesn't work.
    }

}

我已经尝试了各种方法来使它工作,但我无法理解它。我该怎么办?

由于

7 个答案:

答案 0 :(得分:8)

在您的代码中,$myVar是每种方法的本地。

也许你的意思是$this->myVar?

答案 1 :(得分:4)

你需要使用$ this'指针'。

e.g:

class Test
{
     protected $var;

     public function __construct()
     {
          $this->var = 'foobar';
     }

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

答案 2 :(得分:4)

class Manual extends controller {

   private $myVar;

    function Manual(){
        parent::Controller();
        $this->$myVar = 'blablabla';
     }

    function doStuff(){
        echo $this->$myVar; 
    }
}

使用Setters / Getters更像OOP

class Manual extends controller {

   private $myVar;

    function Manual(){
        parent::Controller();
        setMyVar('blablabla');
    }

    function doStuff(){
        echo getMyVar();
    }

    function getMyVar() {
        return $this->myVar;
    }

   function setMyVar($var) {
       $this->myVar = $var;
   }

答案 3 :(得分:2)

function doStuff(){
    echo $this->myVar; 
}

答案 4 :(得分:2)

变量$myVar应该是 属性 ,你不能这样做:

echo $myVar;

你应该这样做:

$this->myVar;

答案 5 :(得分:1)

如上所述,$ myVar对两种方法都是本地的。

您需要将$ myVar声明为类主体中的属性

protected $myVar;

然后使用伪变量$ this来访问方法中的属性,包括构造函数

$this->myVar;

答案 6 :(得分:1)

$myVar字段必须在父类中声明为public/protected或在后代类中声明,并且在您的doStuff()方法中,您必须编写$this->myVar而不是$myVar 1}}