Public, private и $this в ООП на PHP

Внутри классов, перед методами и свойствами, можно встретить слова public, private. Разберёмся для чего они нужны. А также посмотрим как обратиться к методу или свойству изнутри класса.

Переменная $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" в конце.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, покупка SSL сертификатов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: