foreach中的PHP名称与外部作用域相同会导致覆盖
发布时间:2020-12-13 13:30:30 所属栏目:PHP教程 来源:网络整理
导读:所以今天我正在创建一个表单,碰巧在foreach循环中给出一个与后来使用的名称相同的变量名.令我惊讶的是,foreach循环的声明覆盖了变量的先前声明. 对我来说,这似乎很奇怪,因为我期望as $value =的范围. $a将两个变量的范围限制为foreach循环. 这是发生的事情:
所以今天我正在创建一个表单,碰巧在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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |