php foreach 作用域,foreach中的PHP名称与外部作用域相同会导致覆盖

所以今天我正在创建一个表单,碰巧在foreach循环中给出一个与后来使用的名称相同的变量名.令我惊讶的是,foreach循环的声明覆盖了变量的先前声明.

对我来说,这似乎很奇怪,因为我期望as $value =>的范围. $a将两个变量的范围限制为foreach循环.

这是发生的事情:

php > $a = 5;

php > $b = array(1,2,3);

php > foreach($b as $value => $a){ echo $a; };

123

php > echo $a;

3

这是我的预期:

php > $a = 5; //define a in outer scope

php > $b = array(1,2,3);

php > foreach($b as $value => $a){ echo $a; /* This $a should be the one from the foreach declaration */ };

123

php > echo $a; //expecting inner scope to have gone away and left me to get the outer scoped $a

如果我使用$a作为foreach循环的关键,同样的事情会发生,这个宝石更可怕:

php > $a = 5;

php > $b = array(1,2,3);

php > foreach($b as $a => $b){ var_dump($b); }

int(1)

int(2)

int(3)

php > var_dump($b) // => int(3)

它覆盖了$b数组,但仍然覆盖了它的成员.

总而言之,它似乎有点古怪.我的问题是,问我在哪里可以找到指明这种行为是预期的文档/手册?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值