微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,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,3);
PHP > foreach($b as $a => $b){ var_dump($b); }
int(1)
int(2)
int(3)
PHP > var_dump($b) // => int(3)

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

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

PHP中的范围是全局或函数级别,没有块范围,请参见 http://php.net/manual/en/language.variables.scope.php

原文地址:https://www.jb51.cc/php/137648.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐