php 赋值运算符
Posted off-white
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于php 赋值运算符的主要内容,如果未能解决你的问题,请参考以下文章