在PHP中使用引用变量的每个坑的讨论

写PHP很多年了,但仍然犯了很低的错误。今天,我们相会在foreach坑时,变量的引用,和PHP版本是这样的:5.6.12代码如下:


< PHP
$ ARR = {'a',B,C,D,E'};
foreach(ARR美元美元美元我= >){
A. '_美元=美元。美元;
$;
}
回声';
foreach(ARR美元美元美元我= >){
$;
}
回声';
print_r($ ARR);


输出结果


这是看第二foreach输出结果起初很莫名其妙。你怎么能输出两d_d

仔细想想,因为php foreach美元的范围是整个函数的局部变量,它仍然是有效的外环,而不是封闭的环。

所以当第二个被执行,美元是不是一个新的变量,但它仍然指向arr数组的第五美元的元素的地址参考,

当第二foreach是回路中,它实际上是把第五美元的ARR数组元素,

具体分配,

第一次:a_a分配第五要素,结果是:{ a_a,b_b,c_c,d_d,a_a }

第二时间:b_b分配第五要素,结果是:{ a_a,b_b,c_c,d_d,b_b }

第三次:c_c分配第五要素,结果是:{ a_a,b_b,c_c,d_d,c_c }

第四次:d_d分配第五要素,结果是:{ a_a,b_b,c_c,d_d,d_d }

第五次:在这一点上,由于第五元已成为d_d和抽调d_d第五要素,结果是:{ a_a,b_b,c_c,d_d,d_d }

uff1a结算条款

1。不要尽可能使用相同的循环变量名;

2。unset($)前或使用前处理、地址的应用;

或者使用上面的代码示例:




$ ARR = {'a',B,C,D,E'};
foreach(ARR美元美元美元我= >){
A. '_美元=美元。美元;
$;
}
回声';
回声$;
回声';

/ /复原了
unset(美元);

echo = CCC;
回声';
print_r($ ARR);
回声';
foreach(ARR美元美元美元我= >){
$;
}
回声';
print_r($ ARR);


输出结果:


现在,这些小细节必须注意。

以上是PHP在foreach引用变量在基坑整体内容的使用的简单介绍,希望多支持~