码迷,mamicode.com
首页 > Web开发 > 详细

php 赋值运算符

时间:2018-08-23 16:59:53      阅读:509      评论:0      收藏:0      [点我收藏+]

标签:目的   项目   .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

php 赋值运算符

标签:目的   项目   .com   dump   百度   bucket   传递   php   为我   

原文地址:https://www.cnblogs.com/Off-White/p/9524291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!