php的数组传值调用与传址调用

巴扎黑
Lepaskan: 2016-11-12 14:00:22
asal
1827 orang telah melayarinya

在java中数组的调用默认是是传址调用:主体方法中传递一个数组给某个方法,在该方法内修改了数组的某个值;回到主方法中会发现数组已经发生了改变;

 测试代码:

public class ArrayTest {
public static void main(String[] args){
Map[] maparray=new Map[3];
for (int i = 0; i < maparray.length; i++) {
Map<String,String> map=new HashMap<String,String>();
map.put("a", i+"_ajkcz");
map.put("c", "werq_"+i);
maparray[i]=map;
}
System.out.println("++++++++++++++++++++++++");
for (int i = 0; i < maparray.length; i++) {
Map<String,String> map=maparray[i];
Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key=(String) it.next(); 
System.out.println(key+"\t"+map.get(key) );
}
}
System.out.println("++++++++++++++++++++++++");
new ArrayCharge().printAndChangeArray(maparray);
System.out.println("++++++++++++++++++++++++");
for (int i = 0; i < maparray.length; i++) {
Map<String,String> map=maparray[i];
Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key=(String) it.next(); 
System.out.println(key+"\t"+map.get(key) );
}
}
}
}
class ArrayCharge {
public void printAndChangeArray(Map[] maparray){
for (int i = 0; i < maparray.length; i++) {
Map<String,String> map=maparray[i];
map.put("a",i+"________");
}
for (int i = 0; i < maparray.length; i++) {
Map<String,String> map=maparray[i];
Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key=(String) it.next(); 
System.out.println(key+"\t"+map.get(key) );
}
}
}
}
控制台输出结果:
++++++++++++++++++++++++
cwerq_0
a0_ajkcz
cwerq_1
a1_ajkcz
cwerq_2
a2_ajkcz
++++++++++++++++++++++++
cwerq_0
a0________
cwerq_1
a1________
cwerq_2
a2________
++++++++++++++++++++++++
cwerq_0
a0________
cwerq_1
a1________
cwerq_2
a2________
Salin selepas log masuk

而在php中,数组的调用默认是传值调用,在字方法中修改了数组,在父方法中无法察觉

测试代码:

<?php 
$arraytest=array();
for($i=0;$i<3;$i++){
$child=array();
$child[&#39;keystr&#39;]=&#39;key&#39;.$i;
$child[&#39;valuestr&#39;]=&#39;value&#39;.$i;
$arraytest[]=$child;
}
print_r($arraytest);
print_r("+++++++++++++++++++++++++");
for($i=0;$i<count($arraytest);$i++){
$child=$arraytest[$i];
$child[&#39;valuestr&#39;]="_________".$i;
}
print_r($arraytest);
print_r("+++++++++++++++++++++++++");
?>
Salin selepas log masuk


控制台输出:

Array (
 [0] => Array (
            [keystr] => key0
            [valuestr] => value0
 )
 [1] => Array (
 [keystr] => key1
 [valuestr] => value1
 )
 [2] => Array ( 
[keystr] => key2
 [valuestr] => value2 
)
 )
 +++++++++++++++++++++++++
Array (
 [0] => Array ( 
[keystr] => key0
 [valuestr] => value0 
) 
[1] => Array (
 [keystr] => key1 
[valuestr] => value1
 ) 
[2] => Array ( 
[keystr] => key2 
[valuestr] => value2
 ) 
) +++++++++++++++++++++++++
Salin selepas log masuk

如果希望在php中也能类似java中传数组参数给字方法,字方法处理完成后父方法中数组也跟随改变则需要在传递参数时不传递值而是传递值的指针,例如p的值是100,即$p=100;在传递p给字方法时需要传递的参数则为“&$p”

测试代码:

<?php 
$arraytest=array();
for($i=0;$i<3;$i++){
$child=array();
$child[&#39;keystr&#39;]=&#39;key&#39;.$i;
$child[&#39;valuestr&#39;]=&#39;value&#39;.$i;
$arraytest[]=$child;
}
print_r($arraytest);
print_r("+++++++++++++++++++++++++");
for($i=0;$i<count($arraytest);$i++){
$child=&$arraytest[$i]; //注意这里加了一个指针符号,代表是传址调用
$child[&#39;valuestr&#39;]="_________".$i;
}
print_r($arraytest);
print_r("+++++++++++++++++++++++++");
?>
Salin selepas log masuk


控制台输出:

Array (
 [0] => Array (
 [keystr] => key0 
[valuestr] => value0 
)
 [1] => Array (
 [keystr] => key1 
[valuestr] => value1 
) 
[2] => Array ( 
[keystr] => key2 
[valuestr] => value2 
) 
)
 +++++++++++++++++++++++++
Array ( 
[0] => Array ( 
[keystr] => key0 
[valuestr] => _________0 
)
 [1] => Array ( 
[keystr] => key1 
[valuestr] => _________1 
)
 [2] => Array ( 
[keystr] => key2 
[valuestr] => _________2 
) 
)
Salin selepas log masuk


Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan