Языки программирования

Инкапсуляция в PHP

Как и обещал на предыдущем уроке cегодня мы поговорим на тему «инкапсуляция в php». И начнем конечно же с понятия инкапсуляции:
Инкапсуляция — это свойство объекта/класса регулировать доступ к определенным своим компонентам извне самого объекта/класса. Например, на мониторе есть кнопки регулировки яркости — они в прямом доступе для пользователя. А есть микросхемы внутри — к ним доступ ограничен. Это и есть пример инкапсуляции.
В программном смысле, инкапсуляция — это скрытие переменных в классе от пользователя, т.е. все переменные (свойства) класса делаются скрытыми (private), а методы открытыми (public). Прелесть данного подхода в том, что в методах можно вставить код для проверки всяких ошибок, и потом о них не думать, когда вызывается метод.

Уровни инкапсуляции:

  • public – методы и свойства доступны извне объекта (открытые, или общедоступные);
  • Пример использования:
  class Page { // Объявляем класс
  
	public $title = 'Index Page'; // Определяем уровень
}

$index = new Page();
echo $index->title; // Все прекрасно работает
  • private – закрытые методы могут быть вызваны только в классе, где они были объявлены ( к ним нельзя обратиться из производных классов);
Пример использования:
class human {
    private $age = 5;
    function say() {
      // внутри класса доступ к закрытым данным есть
      echo "$this->age";
    }   
  }
   
  $obj = new human;
   
  // напрямую из вызывающей программы доступа к закрытым данным нет
  echo "$obj->age";  // Ошибка! доступ закрыт!
   
  // однако с помощью метода можно выводить закрытые данные
  $obj->say();       // Допустимо
  • protected – защищённые методы могут вызываться только из того же класса или его производных классов.
Пример использования:
class Page { // Объявляем класс
	protected $title = 'Index Page'; // Уровень доступа

	public  function getTitle()  {
		return $this->title;
	}
}

$index = new Page();
//приведет к ошибке
echo $index->title;
Таким образом, если мы в примере с уровнем «public», объявим свойство $title, используя спецификатор доступа protected — попытка обращения к нему, через объект, незамедлительно приведет к ошибке.

Зачем они нужны?

Уровни инкапсуляции, или как их еще называют, ключевые слова определяющие область видимости, позволяют предоставлять доступ только к тем элементам класса, которые необходимы для конкретного клиента. Соответственно контроль доступа, благодаря которому можно запретить доступ к некоторым элементам класса, помогает избежать не правильной, работы приложения в целом.
Самоучитель по PHP