将对象存储到其中后,PHP会话中的值会发生更改

时间:2013-11-21 21:50:08

标签: 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 ) ) 

1 个答案:

答案 0 :(得分:3)

PHP不是创建对象的副本,而是在会话中存储引用。

如果您需要副本,请使用clone()

$_SESSION['z'] = clone $z;