Что такое модификатор доступа readonly в PHP?

«Что такое модификатор доступа readonly в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP модификатор readonly применяется к типизированным свойствам класса, делая их доступными только для чтения после инициализации.

Ключевые особенности:

  • Значение можно присвоить только один раз — при объявлении или в конструкторе класса.
  • Любая последующая попытка изменения свойства вызовет Error.
  • Требует явного указания типа (не работает с mixed или нетипизированными свойствами).

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

class UserDto {
    public readonly string $email;
    public readonly DateTimeImmutable $createdAt;

    public function __construct(string $email) {
        $this->email = $email;
        $this->createdAt = new DateTimeImmutable();
    }
}

$user = new UserDto('test@example.com');
echo $user->email; // test@example.com
// $user->email = 'new@example.com'; // Вызовет Fatal error: Cannot modify readonly property

Практическое применение:

  • Создание DTO (Data Transfer Objects) и Value Objects, которые должны быть иммутабельными.
  • Моделирование сущностей с неизменяемыми идентификаторами или датами создания.
  • Повышение надёжности кода, явно запрещая изменение критических свойств после создания объекта.