标签:目的 项目 .com dump 百度 bucket 传递 php 为我
最近在项目中遇到一个bug,通过PHP调用别人的接口,然后通过json_decode将得到的结构反序列化,可以得到一个数组,数组中包含着很多的stdClass(其实可以在json_decode中加一个参数,得到的都是array),
这些都是一些简单的类,可以通过->{}调用其属性,就没有想再转换为array了。得到这些结果,我得再重新格式化一下,变为我想要的数据,于是对这些stdClass的一些属性进行修改,然后再添加到我自己的array中,
其中有一个步骤,需要对同一个stdClass进行多次修改,依次添加到array中,就在这个步骤,出现了bug,最后的结果,改写的结果都变成了最后插入array中的那个值。
举个栗子
对一个stdClass的bucket属性修改5次,第一次设置为1,最后一次设置为5,挨个添加到一个array中,我的目的是array中有5个stdClass,第一个stdClass 的bucket应该为1,最后一个为5。但是,数组中所有stdClass的bucket都为5,
我试了一下,array可以存储相同的,但是为什么存储的stdClass会都变成5呢?
我准备自己动手试一下
1 $newobj = new stdClass(); 2 $newobj->name = "India"; 3 $newobj->work = "Development"; 4 $newobj->address="patna"; 5 $arr = array(); 6 $arr[] = $newobj; 7 $obj1 = $newobj; 8 $obj1->name = ‘1‘; 9 var_dump($obj1); 10 var_dump($arr);
显示结果令我大吃一鲸
竟然都name都变成了1,这个时候我又百度了一下php的赋值运算符,也就是=,结果PHP的对象使用的引用传递,这才恍然大悟。
参考链接:http://php.net/manual/zh/language.operators.assignment.php
标签:目的 项目 .com dump 百度 bucket 传递 php 为我
原文地址:https://www.cnblogs.com/Off-White/p/9524291.html