首页 > 代码库 > php 对象数组/传递数组参数
php 对象数组/传递数组参数
在php当中,普通得数据类型的参数传递是通过copy赋值,而object对象则会传递对象的引用,在函数的调用或者直接赋值时会按照这个规则进行,而php中array()传递属于普通数据类型(与我们在C/C++中的传递数组时是传递指针有所不同),因此数组不能够使用clone将内容复制,而是直接赋值时就会复制整个数组,但是该数组是否会完全把内容复制,还要根据数组的item内容确定:当数组的item是普通数据类型时(数值,数组etc.),会直接整个数组包括内容都被复制;当数组的item是object时,只会复制数组的引用,而指向的object的内容是不会被复制的。因此对象数组需要使用clone对每个item复制方可对整个数组复制。
1 class T { 2 3 public $curarray; // 类数组成员 4 5 function T($value) { 6 $this->curarray = $value; 7 } 8 9 function change($cas) { // 改变数组内容10 for ($j = 0; $j < 10; $j++) {11 $this->curarray[$j] = $cas;12 }13 }14 15 function get() { // 返回数组16 return $this->curarray;17 }18 19 }20 21 class Node {22 23 public $val;24 25 function Node($v) {26 $this->val = $v;27 }28 29 }30 31 function test() {32 $array1 = [];33 for ($i = 0; $i < 10; $i++) {34 array_push($array1, 0);35 }36 $obj1 = new T($array1);37 $obj1->change(2);38 //$array1的item内容为普通类型,因此传参时是整个复制传参,$array1的内容不会改变39 40 $array2 = [];41 for ($i = 0; $i < 10; $i++) {42 array_push($array2, new Node(0));43 }44 $obj2 = new T($array2);45 $obj2->change(2);46 // $array2的item内容为object,因此传递的相当于一个引用数组,因此对数组内容修改,会导致$array2的内容改变47 48 $tmpArray = [];49 foreach ($array2 as $item) {50 array_push($tmpArray, clone $item);51 }52 //采用这种clone的方法才是复制传入参数,change方法不会影响$array2的内容53 }
php 对象数组/传递数组参数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。