PHP: Область действия переменной в ООП?
Вот мой код:
class Manual extends controller {
function Manual(){
parent::Controller();
$myVar = 'blablabla';
}
function doStuff(){
echo $myVar; // Doesn't work.
}
}
Я пробовал различные методы, чтобы заставить это работать, но у меня не укладывается в голове. Что я могу сделать?
Спасибо
7 answers
В вашем коде $myVar
является локальным для каждого метода.
Возможно, вы имели в виду $this->myVar?
Вам нужно использовать $this 'указатель'.
Например:
class Test
{
protected $var;
public function __construct()
{
$this->var = 'foobar';
}
public function getVar()
{
return $this->var;
}
};
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;
}
function doStuff(){
echo $this->myVar;
}
Переменная $myVar
должна быть свойство класса, и вы не можете сделать:
echo $myVar;
Вы должны сделать:
$this->myVar;
Как написано, $myVar является локальным для обоих методов.
Вам нужно объявить $myVar как свойство в теле класса
protected $myVar;
, А затем используйте псевдопеременную $this для доступа к свойству в методах, включая конструктор
$this->myVar;
$myVar
поле должно быть объявлено как public/protected
в родительском классе или объявлено в классе-потомке, а в вашем методе doStuff()
вы должны написать $this->myVar
, а не $myVar