Здравствуйте.
Зачем нужен, например, DateTimeImmutable? Класс, в которой я могу загнать дату, а используя add или sub с ней ничего не произойдет. Мне интересно, скорее не как их использовать, а ситуации при которых они могут понадобиться.
Чтобы по коду ничего не могли сделать с датой, если очень захочется? А зачем код, который пытается это сделать с датой, с которой этого делать не надо. Много восторженных комментов нашел, но самих слов "зачем" не нашел.
Очень надеюсь на вашу помощь. Спасибо.
Вам надо почитать статьи о функциональном программировании и языках функционального программирования (например, Lisp). Неизменяемость позволяет сократить количество ошибок в коде, так как состояние объекта не может быть внезапно изменено, например, в другом потоке, или другом вызове функции. Вы всегда знаете с чем работаете.