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


Вот мой код:

class Manual extends controller {

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


    }

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

}

Я пробовал различные методы, чтобы заставить это работать, но у меня не укладывается в голове. Что я могу сделать?

Спасибо

Author: Charles, 2010-06-29

7 answers

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

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

 8
Author: timdev, 2010-06-29 16:51:17

Вам нужно использовать $this 'указатель'.

Например:

class Test
{
     protected $var;

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

     public function getVar()
     {
          return $this->var;
     }
};
 4
Author: VDVLeon, 2010-06-29 16:51:52
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;
   }
 4
Author: DrColossos, 2010-06-29 16:57:33
function doStuff(){
    echo $this->myVar; 
}
 2
Author: Luis Melgratti, 2010-06-29 16:51:44

Переменная $myVar должна быть свойство класса, и вы не можете сделать:

echo $myVar;

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

$this->myVar;
 2
Author: Sarfraz, 2010-06-29 16:52:49

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

Вам нужно объявить $myVar как свойство в теле класса

protected $myVar;

, А затем используйте псевдопеременную $this для доступа к свойству в методах, включая конструктор

$this->myVar;
 1
Author: Alan Storm, 2010-06-29 16:53:26

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

 1
Author: Ris90, 2010-06-29 23:14:02