Инкапсуляция в 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 — попытка обращения к нему, через объект, незамедлительно приведет к ошибке.

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

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Один комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Chinese (Traditional)EnglishJapaneseRussianUkrainian

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: