foreach带来的变量作用域的一个小坑

问题描述

今天排查一个bug的时候,发现了foreach的一个小坑

比如下面这段十分十分简单的代码:

1
2
3
4
5
<?php
$a = [1, 2, 3];
foreach ($a as $value) {
echo $value;
}

但是如果$value在之前被定义过,并且在循环之后你还想要继续使用的话,那么这里foreach的命名就会给你带来麻烦,比如下述代码:

1
2
3
4
5
6
7
8
<?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

坚持原创技术分享,您的支持将鼓励我继续创作!