foreach变量作用域
问题描述
今天排查一个bug的时候,发现了foreach的一个小坑
比如下面这段十分十分简单的代码:
<?php
$a = [1, 2, 3];
foreach ($a as $value) {
echo $value;
}
但是如果$value在之前被定义过,并且在循环之后你还想要继续使用的话,那么这里foreach的命名就会给你带来麻烦,比如下述代码:
<?php
$value = 6;
$a = [1, 2, 3];
foreach ($a as $value) {
echo $value;
}
$b = $value;
echo $b; // output 3
上述代码在执行之后,$b的值可以看到是3,那是因为在foreach的时候,$value被重新赋值了
总结
在如果有使用到foreach,那么as后面的变量的命名最好不要和其他的变量发生重复,不然可能会引入一些意想不到的bug
原因是:PHP有函数作用域,但是没有块级作用域,没有C/C++、java等语言的块级作用域概念
参考:
登陆发表评论