TGViewer
PHP | Вопросы собесов PHP | Вопросы собесов @easy_php_ru · 2.3K subscribers
Post #2362 306
🤔 Что содержит инкапсуляция кроме сокрытия данных?

Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства.

🚩Основные аспекты инкапсуляции

Сокрытие данных (private, protected).
Контроль доступа через геттеры и сеттеры.
Защита объекта от некорректных данных.
Чёткое API для работы с объектом.
Разделение ответственности внутри класса.

🟠Сокрытие данных (`private`, `protected`)
Скрываем внутренние переменные, чтобы их нельзя было изменить напрямую.
class User {
private string $password; // Прямой доступ запрещён

public function __construct(string $password) {
$this->password = $password;
}
}

$user = new User("123456");
// echo $user->password; // ❌ Ошибка! Доступ запрещён


🟠Контроль доступа через геттеры и сеттеры
Предоставляем доступ к данным через методы (контролируем поведение).
class User {
private string $password;

public function __construct(string $password) {
$this->setPassword($password);
}

public function getPassword(): string {
return "Секретный пароль скрыт"; // Никогда не выдаём оригинал
}

public function setPassword(string $password) {
if (strlen($password) < 6) {
throw new Exception("Пароль слишком короткий!");
}
$this->password = password_hash($password, PASSWORD_DEFAULT);
}
}

$user = new User("securePass");
// echo $user->password; // ❌ Ошибка! Доступ запрещён
echo $user->getPassword(); // ✅ "Секретный пароль скрыт"


🟠Защита объекта от некорректных данных
Инкапсуляция позволяет проверять данные перед их сохранением.
class Product {
private float $price;

public function setPrice(float $price) {
if ($price < 0) {
throw new Exception("Цена не может быть отрицательной!");
}
$this->price = $price;
}
}


🟠Чёткое API для работы с объектом
Инкапсуляция создаёт удобный интерфейс для работы с классом.
class Order {
private array $items = [];

public function addItem(string $item) {
$this->items[] = $item;
}

public function getItems(): array {
return $this->items;
}
}

$order = new Order();
$order->addItem("Телефон");
print_r($order->getItems()); // ✅ ["Телефон"]


🟠Разделение ответственности внутри класса
Инкапсуляция помогает отделить внутреннюю логику от интерфейса.
class BankAccount {
private float $balance = 0;

private function logTransaction(float $amount) {
echo "Транзакция: $amount\n";
}

public function deposit(float $amount) {
$this->balance += $amount;
$this->logTransaction($amount);
}

public function getBalance(): float {
return $this->balance;
}
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // ✅ 100


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_php_ru
  1. Oct 10, 2026🤔 Что такое агрегатные функции? Агрегатные функции в SQL и других языках обработки данных…
  2. Oct 9, 2026🤔 Как настроить autoload через Composer? Composer предоставляет механизм автоматической з…
  3. Oct 9, 2026🤔 Какое отличие у протоколов tcp и udp? Это два основных транспортных протокола в интерне…
  4. Oct 8, 2026🤔 Есть ли какое-то различие между одинарными и двойными кавычками? - В большинстве языков…
  5. Oct 7, 2026🤔 В каких случаях используют индексы? Индексы в базах данных используются для ускорения о…
  6. Oct 7, 2026🤔 В чем преимущество фасада? Фасад (Facade) в PHP — это паттерн проектирования, который у…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →