标签: php session object store
当我将对象存储到PHP 5.3中的会话然后尝试更改其属性时,它们也在会话数组中更改。为什么会这样?请解释一下!
我的代码:
<?php class Z { public $val; } session_start(); $z = new Z(); $z->val = 10; $_SESSION['z'] = $z; $z->val++; print_r($_SESSION); ?>
结果:
Array ([z] => Z Object ( [val] => 11 ) )
答案 0 :(得分:3)
PHP不是创建对象的副本,而是在会话中存储引用。
如果您需要副本,请使用clone():
clone()
$_SESSION['z'] = clone $z;