«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/06/07 23:21:50  №1205212 1
Вопрос нуба: зачем нужны иммутабельные объекты?
Ответы: >>1205213 >>1206013
Аноним 2018/06/07 23:23:14  №1205213 2
>>1205212
Когда тебе нужна иммутабельность.
Аноним 2018/06/08 20:18:16  №1206013 3
>>1205212

Хороший вопрос. Давай подумаем, какие есть у них плюсы и минусы:

- если ты передаешь иммутабельный объект в функцию, ты на 100% уверен что она с ним ничего не сделает. В случае мутабельных объектов глядя на код, нельзя на 100% сказать, что тут происходит:

$money = new Money(300, 'USD');
$user->setMoney($money);

doSomething($user);

// если функция делает $user->getMoney()->setAmount(150), то вполне возможно
// что там уже другая сумма и в сообщении будет не "300 USD"
echo "Вам добавлено {$money->getAsString()} денег\n";

В случае, если бы объект Money был иммутабельным, то мы можем гарантировать, что сообщение будет выведено корректно и будет содержать сумму 300 USD.

То же касается хранения данных в каком-то архиве. Если ты кладешь туда иммутабельные объекты, то можешь быть уверен, что с ними ничего не случится. Есть, например, интересный подход, когда текущее состояние объекта (например, банковского счета) представляется как набор иммутабельных транзакций (пополнения, списания).

- если в переменной хранится иммутабельный объект, то очень легко и быстро проверить, изменилась она или нет:

$oldValue = ...;
$currentValue = ....;

if ($currentValue === $oldValue) {
echo "Данные 100% не изменились\n";
} else {
// сохранить изменения
}

В случае с обычными объектами так не выйдет.

Но есть и минусы:

- для любого изменения надо создавать новый иммутабельный объект, что может быть помедленнее и требовать больше памяти

Также, я решил погуглить, и почитать что другие люди пишут по теме, вот например: https://hackernoon.com/5-benefits-of-immutable-objects-worth-considering-for-your-next-project-f98e7e85b6ac?gi=5ea2ddd2d229