求助 session无法保存对象变量修改的内容如何解决

skygw

我在onConnect方法内实例化了一个对象并保存到session了,然后再onMessage方法里面修改了这个对象的一个属性,但是下次再访问的时候这个属性依然没有被修改的,也就是保存不了onMessage方法所做出的改动。比如:
function onConnect($client_id){
$an=new MyAnimal();
$an->name="狗熊";
$_SESSION['animal']=$an;
}

function onMessage($message){
$an=$_SESSION['animal'];
$an->name="熊猫";
}

function onClose(){
echo $_SESSION['animal']->name;//还是输出“狗熊”,在onMessage方法修改的内容并没有被保存。
}

有看到说gateway只是复制了一份传递给Business,所以原来的类已经被释放了。那像我这种需求应该怎么实现比较适合呢,感谢。

607 2 0
2个回答

nitron
function onMessage($message){
    $arr = $_SESSION['animal'];
    $arr->name = 'xxx';// 你这里修改的是$arr....不是SESSION
    $_SESSION['animal'] = $arr // 这里才是修改SESSION
}

........你是怎么学的PHP?

  • 暂无评论
稚出

变量的赋值是传值不是传址

  • skygw 2022-09-26

    PHP的对象不是传址的吗?用PHP比较少。

  • skygw 2022-09-26

    而且……按照你说的,用$_SESSION['animal']->name="xxx";也没有保存,下次请求依然是之前的值。

年代过于久远,无法发表回答
🔝