Что такое аксессоры (accessors) в контексте ООП?

«Что такое аксессоры (accessors) в контексте ООП?» — вопрос из категории ООП, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В объектно-ориентированном программировании аксессоры (accessors) — это публичные методы класса, которые обеспечивают контролируемый доступ к его приватным или защищённым полям. Они реализуют принцип инкапсуляции, скрывая внутреннее представление данных и позволяя добавлять логику при чтении или записи.

Основные типы аксессоров:

  1. Геттер (Getter): Метод для безопасного получения значения свойства.
  2. Сеттер (Setter): Метод для безопасной установки значения свойства, часто с валидацией.

Пример на PHP:

<?php

class User
{
    private string $name;
    private int $age;

    // Геттер для имени
    public function getName(): string
    {
        return $this->name;
    }

    // Сеттер для имени с базовой валидацией
    public function setName(string $name): void
    {
        if (empty(trim($name))) {
            throw new InvalidArgumentException('Имя не может быть пустым');
        }
        $this->name = $name;
    }

    // Геттер для возраста
    public function getAge(): int
    {
        return $this->age;
    }

    // Сеттер для возраста с валидацией
    public function setAge(int $age): void
    {
        if ($age < 0 || $age > 150) {
            throw new InvalidArgumentException('Некорректный возраст');
        }
        $this->age = $age;
    }
}

// Использование
$user = new User();
$user->setName('Анна'); // Используем сеттер
$user->setAge(30);

echo $user->getName(); // Выведет: Анна (используем геттер)

Преимущества использования аксессоров:

  • Инкапсуляция: Внутренняя структура класса скрыта от внешнего кода.
  • Валидация: Можно проверять и преобразовывать данные перед их сохранением.
  • Гибкость: Легко изменить внутреннюю логику хранения данных, не меняя публичный API класса.
  • Отладка: Упрощает добавление логирования или точек останова при доступе к свойствам.