Ответ
Модификатор доступа protected означает, что член класса (свойство или метод) доступен внутри самого класса и внутри всех классов-наследников. Это ключевой механизм для реализации принципа наследования, позволяющий скрыть детали реализации от внешнего кода, но оставить их доступными для расширения в дочерних классах.
Пример в PHP:
class DatabaseConnection {
protected $connection;
protected function connect() {
// Логика установки защищенного соединения
$this->connection = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
}
public function __construct() {
$this->connect(); // Внутренний вызов protected метода
}
}
class UserRepository extends DatabaseConnection {
public function getUsers() {
// Наследник имеет доступ к protected свойству родителя
$stmt = $this->connection->query('SELECT * FROM users');
return $stmt->fetchAll();
}
}
$repo = new UserRepository();
$users = $repo->getUsers(); // Работает
// $repo->connection; // Фатальная ошибка: доступ извне запрещен
// $repo->connect(); // Фатальная ошибка: доступ извне запрещен
Ключевые отличия:
private: Доступ только внутри класса, где объявлен. Наследники его не видят.protected: Доступ внутри класса и его наследников. Извне (глобальная область видимости, другие классы) — недоступен.public: Доступ откуда угодно.
protected часто используется для методов-«кирпичиков» внутренней логики (шаблонный метод) или свойств, которые должны быть унаследованы, но не изменяться произвольно извне.