Модификаторы доступа определяют видимость свойств и методов класса — они являются фундаментальной частью инкапсуляции в объектно-ориентированном программировании.
class User {
public $name; // Доступно отовсюду
public function getName() {
return $this->name;
}
}
$user = new User();
$user->name = 'Alex'; // Прямое присвоение
echo $user->getName(); // Доступ через метод
class User {
protected $passwordHash;
protected function validate() {
// Логика валидации
}
}
class Admin extends User {
public function resetPassword() {
$this->passwordHash = null; // Доступ из подкласса
$this->validate(); // Доступ к protected методу
}
}
class Database {
private $connection;
private function connect() {
// Логика подключения
}
public function query() {
$this->connect(); // Доступ только внутри класса
}
}
Модификатор | Класс | Подкласс | Внешний код |
---|---|---|---|
public | ✅ | ✅ | ✅ |
protected | ✅ | ✅ | ❌ |
private | ✅ | ❌ | ❌ |
class Vehicle {
public $model; // Доступно всем
protected $mileage; // Только для наследников
private $vin; // Только для этого класса
public function __construct($vin) {
$this->vin = $vin;
}
}
class Car extends Vehicle {
public function showMileage() {
return $this->mileage; // Доступно
}
public function showVin() {
return $this->vin; // Ошибка! private доступ
}
}
class Product {
private $price;
public function getPrice() {
return $this->price;
}
public function setPrice($price) {
if ($price > 0) {
$this->price = $price;
}
}
}
class Config {
public const API_KEY = '123';
private const DB_PASS = 'secret';
}
class Test {
private $secret;
public function steal(Test $other) {
$this->secret = $other->secret; // Доступно!
}
}
выбор модификатора доступа — это вопрос проектирования API вашего класса. Используйте:
public
для открытого APIprotected
для функционала, доступного наследникамprivate
для внутренней реализации, которая не должна быть доступна извне