2010-06-29 2 views
3

Вот мой код:PHP: переменная область в ООП?

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()' use 'parent :: __ construct()' – nickf

ответ

8

В коде $myVar является локальным для каждого метода.

Возможно, вы имели в виду $this->myVar?

+1

Yup: '$ this- > 'когда в объектном контексте,' self :: ', когда в статическом контексте. –

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

Вы должны использовать $ это 'указатель'.

например:

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

Еще более ООП, как с сеттеров/геттеров

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 должна быть свойство класса, и вы не можете do:

echo $myVar; 

Вы должны сделать:

$this->myVar; 
1

Как написано, $ MYVAR является локальным для обоих методов.

Вы должны объявить $ MYVAR как свойство в теле класса

protected $myVar; 

, а затем использовать псевды переменные $, чтобы получить доступ к собственности в методах, в том числе конструктора

$this->myVar; 
1

$myVar поле должно быть объявлено как public/protected в родительском классе или объявлено в классе descedent, а в вашем методе doStuff() вы должны написать $this->myVar не $myVar

Смежные вопросы