2010-06-29 62 views
3

這裏是我的代碼:PHP:OOP中的變量範圍?

class Manual extends controller { 

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


    } 

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

} 

我已經試過各種方法,使其工作,但我不能讓我的頭周圍。我能做什麼?

感謝

+1

小提示(如果這是PHP5):代替'function Manual'使用'function __construct'而不是'parent :: Controller()'使用'parent :: __ construct()' – nickf 2010-06-29 23:18:10

回答

8

在你的代碼,$myVar是本地的每一個方法。

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

+1

Yup:'$ this- >當處於對象上下文中時,處於靜態上下文中時爲'self ::'。 – 2010-06-29 16:52:06

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

您需要使用$ this指針「。

如:

class Test 
{ 
    protected $var; 

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

    public function getVar() 
    { 
      return $this->var; 
    } 
}; 
4
class Manual extends controller { 

    private $myVar; 

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

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

更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; 
    } 
2

變量$myVar應該是一類的財產,你不能做:

echo $myVar; 

你應該這樣做:

$this->myVar; 
1

書面,$ myVar的是本地的兩種方法。

需要聲明$ myVar的作爲類主體的屬性

protected $myVar; 

,然後使用僞變量$ this訪問方法的財產,包括構造

$this->myVar; 
1

$myVar字段必須在父類中聲明爲public/protected或在後代類中聲明,並且在您的doStuff()方法中,您必須編寫$this->myVar而不是$myVar