PHP中使用foreach和引用导致程序BUG的问题介绍
发布:smiling 来源: PHP粉丝网 添加日期:2013-12-02 21:05:07 浏览: 评论:0
foreach 循环实例用法,在PHP中的foreach是用来进行循环对一个数组的所有元素,作者的foreach基本语法如下:
- FOREACH ($array_variable as $value)
- {
- [code to execute]
- }
- or
- FOREACH ($array_variable as $key => $value)
- {
- [code to execute]
- }
在这两种情况下,多次[代码执行]将被处死是等于在$ array_variable数组元素的个数,让我们来看一个例子。假设我们有下面的代码段:
- $array1 = array(1,2,3,4,5);
- FOREACH ($array1 as $abc)
- {
- print "new value is " . $abc*10 . "<br>";
- }
输出结果
- new value is 10
- new value is 20
- new value is 30
- new value is 40
- new value is 50
上面是我们对foreach常常使用的方法,下面再看实例
- $a = array(1, 2);
- $b = array(11, 12);
- foreach($a as &$r){
- }
- foreach($b as $r){
- }
- echo $a[1]; // 输出 12
两个的循环的本意可能是: 第一个循环需要在循环中修改元素的内容, 所以使用引用; 但第二个循环只是把 $r 当作一个临时变量. 可是, 为什么 $a[1] 的值发生了改变呢?
当对 $a 的迭代完成后, $r 是 $a[1] 的引用, 改变 $r 的值, 就是改变 $a[1]. 这时, 你可以会奇怪, 代码中并没有修改 $r, 也没有修改 $a[1] 呀?
其实, foreach 是操作的是数组的拷贝, 所以, 后一个迭代相当于:
- for($i=0; $i<count($b); $i++){
- $r = $b[$i]; // 修改了 $r! 相当于 $a[1] = $b[$i];
- }
为了避免这种情况, 应该在第一个迭代之后, 执行 unset($r);从当前环境中删除 $r 这个变量(引用变量).即使不是前面的例子, 在第一个迭代之后, 仍然十分可能再执行类似的语句:$r = 123;
循环变量一般是临时变量, 同一个变量名在代码不同的地方表示不同的东西, 但变量的作用域又存在于循环之外. 这就是这种作用域规则的坏处, 加上”变量不声明即使用”的坏外, 再加上变量无类型的坏处.
所以, 在 PHP 中使用引用变量, 应该在引用使用完之后, 应该 unset(). 所有变量在使用之前应该先 unset().
总结:PHP 引用有些类似 C 语言指针, 但一些重要的特性和 C 语言指针不一样, 如果不注意, 会导致程序 BUG. foreach 操作的是数组或对象的拷贝, 但 PHP5, 可以使用引用操作对象元素本身
Tags: foreach 引用 程序BUG
相关文章
- ·php中foreach和list循环语句实例(2013-11-13)
- ·php foreach与for语句用法区别介绍(2013-11-13)
- ·php foreach循环中使用引用时问题(2013-12-07)
- ·PHP中foreach循环详解(2014-01-09)
- · php foreach用法和实例(2014-01-09)
- ·php foreach循环用法介绍(2014-01-16)
- ·php中foreach和while循环的区别比较(2014-03-03)
- ·php foreach/for循环跳出问题(2014-03-14)
- ·php流程控制(2014-03-18)
- ·php foreach与for语句用法区别介绍(2014-03-22)
- ·php中循环之for()、while()、foreach()用法(2014-03-30)
- ·php中foreach和list循环语句实例(2014-03-31)
- ·php 中for与foreach应用(2014-05-27)
- ·php中foreach curl实现多线程例子(2015-04-04)
- ·PHP循环函数foreach与while性能对比(2015-04-09)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)