Ответ
В 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, которые должны быть иммутабельными.
- Моделирование сущностей с неизменяемыми идентификаторами или датами создания.
- Повышение надёжности кода, явно запрещая изменение критических свойств после создания объекта.