每隔几年都要来学一遍,每次都是入门到放弃。直接上代码,懒得解释。
//常规脑回路,写的代码,抱歉了,bug 成堆 $list=array(); for($i=0;$i<10;$i++){ $obj=array(); $list[]=$obj; //后面会有 break 、return 等复杂逻辑,因此此处进行赋值代码量最少 $obj["val"]=$i; //...一大堆复杂逻辑 } //list= [{},{},{},......,{}] 数组对象这么重要的东西,默认进行赋值操作竟然是值拷贝。每赋值一次,就整个数组复制一遍。不能说这种方式不妥吧,就是感觉不那么好,说不上来的那种不好!
数组对象赋值采用引用的方式赋值,场景绝对比值拷贝多的多。需要做为全新的一个数组对象来对待的场景,完全可以显式的进行新数组的创建操作。直接就省去了很多麻烦。( PHP 也是老人家了,发了这么多版,随便出个 Array2 搞点完全不同的特性来糊弄我一下也行啊)
//修改代码,显式的进行引用。依旧是常规脑回路,写的代码,抱歉了,bug 还是成堆 $list=array(); for($i=0;$i<10;$i++){ $obj=array(); $list[]=&$obj; //后面会有 break 、return 等复杂逻辑,因此此处进行赋值代码量最少 $obj["val"]=$i; //...一大堆复杂逻辑 } //list= [{val:9},{val:9},......,{val:9}] 然后就有了,看似很,其实并没有多大卵用的:引用。有意思的是,它是按名字来引用,这个很关键,也很鸡肋。(在函数参数里面似乎有点儿卵用,就算没有引用传递这种东西,引用参数完全可以用别的带有引用性质的东西来代替)
//好了,这回正常了。不过,我的脑回路已经不正常了,劝退中 $list=array(); for($i=0;$i<10;$i++){ unset($obj); //强加的负担,迟早要翻车,漏了就反复调试来定位吧,一次写出的代码能用就怪了 //这种形式的引用方式,不要也罢:赋值一次,所有变量乱窜 $obj=array(); //如果你不是值拷贝,用得着引用? $list[]=&$obj; //后面会有 break 、return 等复杂逻辑,因此此处进行赋值代码量最少 $obj["val"]=$i; //...一大堆复杂逻辑 } //list= [{val:0},{val:1},......,{val:9}] 