Как и обещал на предыдущем уроке 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 — попытка обращения к нему, через объект, незамедлительно приведет к ошибке.
Зачем они нужны?
Уровни инкапсуляции, или как их еще называют, ключевые слова определяющие область видимости, позволяют предоставлять доступ только к тем элементам класса, которые необходимы для конкретного клиента. Соответственно контроль доступа, благодаря которому можно запретить доступ к некоторым элементам класса, помогает избежать не правильной, работы приложения в целом.