Что такое иммутабельный объект? Как создать?

Ответ
readonly class Email {
    public function __construct(public string $value) {
        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException("Invalid email: $value");
        }
    }

    // Методы возвращают НОВЫЙ объект
    public function withDomain(string $domain): self {
        $local = explode('@', $this->value)[0];
        return new self("$local@$domain");
    }
}

$email = new Email('john@old.com');
$new = $email->withDomain('new.com');
// $email не изменился, $new - новый объект

Правила иммутабельности: readonly свойства, методы-модификаторы возвращают new self(...), нет сеттеров.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.