发现个PHP比较奇葩的事情,看有没有知道的!

水平凡 发布于 2013/11/20 22:37
阅读 579
收藏 1
PHP
public function addField($data) {
        //保存一份原始数据
        $oldData = $data;
        //字段附加配置
        $setting = $data['setting'];
        //附加属性值

        $data['setting'] = serialize($setting);

遇到的奇葩是这样的

原始的$data['setting']是个数组,开始就保存一份到$oldData,下面用serialize序列化$data['setting'],结果奇葩的是,$oldData['setting']也跟着被序列化了!!!!这是为嘛????在大部分PHP环境下是正常的,在个别会这样!!!

加载中
0
买红薯
买红薯
传说中的ThinkPHP版得PC V9作者?
0
欣儿
欣儿
该说不会,不然可能大概也许是有些变为了引用
0
lazyphp
lazyphp

serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。 

手册有这句话,不知道是不是可以这样理解呢?

水平凡
水平凡
问题是,我没有使用引用传值呀~~而且在大部分环境下是不会有这么奇葩的事情的。。。
0
铂金小狗
铂金小狗

搞PHP你还执迷于语法.......

你是不是学谭浩强的PHP程序设计学得脑子都坏了....

lazyphp
lazyphp
PHP就不能执迷语法吗?知其然知其所以然。这是态度的表现。细节决定胜败。
0
Kay
Kay

挺神奇的,就算在Php5中数组也不是默认为引用传递。

0
水平凡
水平凡
我也不知道怎么说,后来追踪到是TP里的I方法导致的!!!可问题是,I方法在其他环境下,也不会造成这么坑爹的问题啊?这问题先标记下,有时间好好分析,主要是要重现这样的环境,也不好找!
返回顶部
顶部