Laravel临时变量无需交互即可更新

时间:2019-07-01 18:52:09

标签: php laravel

我不知道正在做什么,我有两个简单的变量:

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

现在,变量$itemTemporary应该保存$item的数据,如果我在变量$item中有任何交互作用,则此$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 个答案:

答案 0 :(得分:4)

$itemTemporary不是$item对象的副本,而是对象标识符的副本。 (请参见Objects and References。)它指向同一对象。如果需要在更改$item的数据时临时保留它们,则需要使用其他方法,例如克隆对象或将其转换为数组。


实际上,我认为Laravel可能对此有一种方法,所以查了一下,显然是这样的:

$itemTemporary = $item->replicate();

答案 1 :(得分:0)

$itemTemporaryreference $item对象,这就是您看到此行为的原因。

您可以clone像这样:

$itemTemporary = clone $item;