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 赋值运算符的主要内容,如果未能解决你的问题,请参考以下文章

PHP赋值运算符=& [重复]

PHP中的赋值运算符

PHP中的逻辑赋值运算符

php赋值运算符

PHP的运算符

PHP 中的引用赋值运算符 =&