php 对象数组/传递数组参数
2014-12-04 16:22
176 查看
在php当中,普通得数据类型的参数传递是通过copy赋值,而object对象则会传递对象的引用,在函数的调用或者直接赋值时会按照这个规则进行,而php中array()传递属于普通数据类型(与我们在C/C++中的传递数组时是传递指针有所不同),因此数组不能够使用clone将内容复制,而是直接赋值时就会复制整个数组,但是该数组是否会完全把内容复制,还要根据数组的item内容确定:当数组的item是普通数据类型时(数值,数组etc.),会直接整个数组包括内容都被复制;当数组的item是object时,只会复制数组的引用,而指向的object的内容是不会被复制的。因此对象数组需要使用clone对每个item复制方可对整个数组复制。
class T { public $curarray; // 类数组成员 function T($value) { $this->curarray = $value; } function change($cas) { // 改变数组内容 for ($j = 0; $j < 10; $j++) { $this->curarray[$j] = $cas; } } function get() { // 返回数组 return $this->curarray; } } class Node { public $val; function Node($v) { $this->val = $v; } } function test() { $array1 = []; for ($i = 0; $i < 10; $i++) { array_push($array1, 0); } $obj1 = new T($array1); $obj1->change(2); //$array1的item内容为普通类型,因此传参时是整个复制传参,$array1的内容不会改变 $array2 = []; for ($i = 0; $i < 10; $i++) { array_push($array2, new Node(0)); } $obj2 = new T($array2); $obj2->change(2); // $array2的item内容为object,因此传递的相当于一个引用数组,因此对数组内容修改,会导致$array2的内容改变 $tmpArray = []; foreach ($array2 as $item) { array_push($tmpArray, clone $item); } //采用这种clone的方法才是复制传入参数,change方法不会影响$array2的内容 }
相关文章推荐
- PHP和Javascript传递数组参数的方法
- PHP SOAP client pass array to C# SOAP webservice(PHP SOAP 数组参数传递)
- 问vb回调函数中能否将数组作为传递参数?
- 按值、按引用和作为输出变量传递数组参数
- 数组参数传递中的一些问题?
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数(转)
- php处理复选框数组的传递问题
- perl子例程参数传递方式之二:数组作参数
- VB传递数组参数
- perl语言中传递数组参数
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数
- PHP页面间传递参数实例代码
- 给Web Services方法传递数组参数
- PB中调用API函数时传递数组参数的方法
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- out 和 ref 传递数组参数方法
- 小论PHP的函数参数传递方式
- c语言之函数参数传递之数组篇
- 关于arrylist的一些操作(包含利用params传递数组参数)
- vc++动态数组作为参数传递注意的问题