Временная переменная Laravel обновляется без взаимодействия - PullRequest
1 голос
/ 01 июля 2019

Я не могу понять, что делается, у меня есть две простые переменные:

$item = Clients::findOrFail($id);
$itemTemporary = $item;

Теперь переменная $itemTemporary должна содержать данные $item, и если у меня есть какие-либовзаимодействие в переменной $item this $itemTemporary не имеет к этому никакого отношения, верно?

$item = Clients::findOrFail($id);
$itemTemporary = $item;

print_r($itemTemporary->status); // Returns TRUE

$item->status = FALSE;
$item->save();

print_r($itemTemporary->status); // Returns FALSE

Как, черт возьми, меняется $itemTemporary->status?

Ответы [ 2 ]

4 голосов
/ 01 июля 2019

$itemTemporary является не копией объекта $item, а идентификатором объекта. (См. Объекты и ссылки .) Это относится к одному и тому же объекту. Если вам нужно временно хранить данные $item во время их изменения, вам нужно использовать другой метод, такой как клонирование объекта или преобразование его в массив.


На самом деле, я думал, что у Laravel может быть метод для этого, поэтому посмотрел его и, очевидно, он есть:

$itemTemporary = $item->replicate();
0 голосов
/ 01 июля 2019

$itemTemporary будет ссылаться на $item объект, поэтому вы видите такое поведение.

Вы можете клонировать объект следующим образом:

$itemTemporary = clone $item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...