将对象存储到PHP会话中后,PHP会话中的值会发生变化

将对象存储到PHP会话中后,PHP会话中的值会发生变化,php,session,object,store,Php,Session,Object,Store,当我在PHP5.3中将对象存储到会话中,然后尝试更改其属性时,它们在会话数组中也发生了更改。为什么会这样?请给我解释一下 我的代码: <?php class Z { public $val; } session_start(); $z = new Z(); $z->val = 10; $_SESSION['z'] = $z; $z->val++; print_r($_SESSION); ?> PHP不是创建对象的副本,而是在会话中存储引用 如果需要副本,请使用

当我在PHP5.3中将对象存储到会话中,然后尝试更改其属性时,它们在会话数组中也发生了更改。为什么会这样?请给我解释一下

我的代码:

<?php 
class Z {
    public $val;
}
session_start();
$z = new Z();
$z->val = 10;
$_SESSION['z'] = $z;
$z->val++;
print_r($_SESSION);
?>
PHP不是创建对象的副本,而是在会话中存储引用

如果需要副本,请使用:

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

如果需要副本,请使用:

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

如果需要副本,请使用:

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

如果需要副本,请使用:



这个和很多其他的东西都在手册中解释了这个和很多其他的东西都在手册中解释了这个和很多其他的东西都在手册中解释了这个和很多其他的东西都在手册中解释了那个么,当我的php脚本完成时,object是否会删除表单内存而保持会话状态?“我的会话”存储到文件。@user3019468一旦您在会话中放入某个内容,它将一直保留在那里,直到会话被销毁或您自己将其删除。使用
unset($\u SESSION['z'])
自己删除它。是的,谢谢。但我想知道,当我的脚本完成时,是否有对象
$z
留在RAM中?如果没有,则
$\u会话['z']
有一个指向不存在对象的链接
$z
?正如您所指出的,您的会话存储在一个文件(tmp文件)中。所以它不会留在RAM中。PHP会在脚本结束时自动序列化会话中的所有对象,并在下一个请求开始时自动取消序列化。您说过
$\u session['z']
-是对
$z
的引用。所以当脚本完成时,real
$z
会从RAM中销毁,对吗?但它是
$\u会话['z']
中的“复制”,序列化并存储到tmp文件中。当我启动一个新脚本时,另一个脚本
$\u SESSION['z']
将成为内存中的一个新对象。我说的对吗?当我的php脚本完成时,object是否会删除表单内存,但保持会话状态?“我的会话”存储到文件。@user3019468一旦您在会话中放入某个内容,它将一直保留在那里,直到会话被销毁或您自己将其删除。使用
unset($\u SESSION['z'])
自己删除它。是的,谢谢。但我想知道,当我的脚本完成时,是否有对象
$z
留在RAM中?如果没有,则
$\u会话['z']
有一个指向不存在对象的链接
$z
?正如您所指出的,您的会话存储在一个文件(tmp文件)中。所以它不会留在RAM中。PHP会在脚本结束时自动序列化会话中的所有对象,并在下一个请求开始时自动取消序列化。您说过
$\u session['z']
-是对
$z
的引用。所以当脚本完成时,real
$z
会从RAM中销毁,对吗?但它是
$\u会话['z']
中的“复制”,序列化并存储到tmp文件中。当我启动一个新脚本时,另一个脚本
$\u SESSION['z']
将成为内存中的一个新对象。我说的对吗?当我的php脚本完成时,object是否会删除表单内存,但保持会话状态?“我的会话”存储到文件。@user3019468一旦您在会话中放入某个内容,它将一直保留在那里,直到会话被销毁或您自己将其删除。使用
unset($\u SESSION['z'])
自己删除它。是的,谢谢。但我想知道,当我的脚本完成时,是否有对象
$z
留在RAM中?如果没有,则
$\u会话['z']
有一个指向不存在对象的链接
$z
?正如您所指出的,您的会话存储在一个文件(tmp文件)中。所以它不会留在RAM中。PHP会在脚本结束时自动序列化会话中的所有对象,并在下一个请求开始时自动取消序列化。您说过
$\u session['z']
-是对
$z
的引用。所以当脚本完成时,real
$z
会从RAM中销毁,对吗?但它是
$\u会话['z']
中的“复制”,序列化并存储到tmp文件中。当我启动一个新脚本时,另一个脚本
$\u SESSION['z']
将成为内存中的一个新对象。我说的对吗?当我的php脚本完成时,object是否会删除表单内存,但保持会话状态?“我的会话”存储到文件。@user3019468一旦您在会话中放入某个内容,它将一直保留在那里,直到会话被销毁或您自己将其删除。使用
unset($\u SESSION['z'])
自己删除它。是的,谢谢。但我想知道,当我的脚本完成时,是否有对象
$z
留在RAM中?如果没有,则
$\u会话['z']
有一个指向不存在对象的链接
$z
?正如您所指出的,您的会话存储在一个文件(tmp文件)中。所以它不会留在RAM中。PHP会在脚本结束时自动序列化会话中的所有对象,并在下一个请求开始时自动取消序列化。您说过
$\u session['z']
-是对
$z
的引用。所以当脚本完成时,real
$z
会从RAM中销毁,对吗?但它是
$\u会话['z']
中的“复制”,序列化并存储到tmp文件中。当我启动一个新脚本时,另一个脚本
$\u SESSION['z']
将成为内存中的一个新对象。我说得对吗?
Array ([z] => Z Object ( [val] => 11 ) ) 
$_SESSION['z'] = clone $z;