Переменная $this внутри класса
На реальных проектах сайтов используется множество классов. И часто возникает необходимость обратиться к свойству или методу класса изнутри его самого. Конечно, можно написать "new ..." и создать новый объект класса внутри класса, но зачем это делать, если мы уже в этом классе? Есть ругой выход - специальная переменная $this , которая работает внутри классов. Продемонстрируем способ её применения на примере получения значения свойства:<?php
class Mouse{
public $string = 'Мышь';
public function Name(){
return $this->string;
}
}
$a = new Mouse;
$b = $a->Name();
echo $b;
?>
В результате выполнения этого кода будет распечатано слово "Мышь".
Как можно догадаться, через $this можно обратиться не только к свойству, как в приведённом примере, так и к методу внутри класса. Продемонстрируем это:
<?php
class Mouse{
public function Name(){
return 'Мышь';
}
public function Description(){
return $this->Name();
}
}
$a = new Mouse;
$b = $a->Description();
echo $b;
?>
Модификаторы доступа (public, private)
Внутри классов можно встретить слова public и private - это модификаторы доступа. Они нужны для того, чтобы блокировать или разрешить доступ к методу или свойству извне. То есть если установить "private", то будет доступ только изнутри класса, с помощью $this. При этом нельзя будет вызывать метод или свойство за пределами класса. Продемонстрируем это на примере:<?php
class Mouse{
private function Name(){
return 'Мышь';
}
}
$a = new Mouse;
$b = $a->Name();
echo $b;
?>
Если выполнить такой код, то PHP выдаст следующую ошибку:
[Error] Call to private method Mouse::Name() from context ''Давайте модифицируем пример так, чтобы оставить "private", но выполнить функцию "Name()":
<?php
class Mouse{
public function Description(){
return $this->Name();
}
private function Name(){
return 'Мышь';
}
}
$a = new Mouse;
$b = $a->Description();
echo $b;
?>
Посмотрите внимательно на пример: у функции "Name()" всё так же остался модификатор доступа "private", который не даёт обратиться к методу извне. Но код успешно выполнится, потому что обращение к "Name()" идёт через функцию "Description()", в которой стоит "$this->Name();".
Модификаторы public и private нужны для того, чтобы запретить доступ к тем методам и свойствам, которые не должны быть публичными. К примеру, представьте что есть свойство, которое возвращает пароль доступа к системе. Очевидно, что если программист доспустит ошибку, то эта секретная информация может стать публичной. Поэтому лучше задать ей модификатор "private".
Правилом хорошего тона программирование является использование "private" для новых методов и свойств. А если в процессе разработки потребуется сделать запрос к ним извне класса, то "private" меняется на "public". Но изначально лучше везде ставить "private".
Обычно публичные "public" методы пишутся в начале класса, а приватные "private" в конце.