PHP 确实改变了循环的范围并在包含的文件中切换
Posted
技术标签:
【中文标题】PHP 确实改变了循环的范围并在包含的文件中切换【英文标题】:PHP does scope change for loops and switch in included files 【发布时间】:2019-11-16 08:08:14 【问题描述】:如果在一个 for 循环中,有一个包含文件,并且在该包含文件中,还有另一个 for 循环,则 continue 2 不起作用
这是设计使然吗?或者这是一个错误?我完全不知所措
以下信息
文件 temp_outer_loop.php 的内容
<pre>
<?php
for ($z=0; $z < 20 ; $z++)
echo "\r\nlooping z $z of 20";
for ($a=0; $a < 20 ; $a++)
echo "\r\n\tlooping a $a of 20";
if ($a==10) continue 2;
echo "<hr>";
for ($x=0; $x < 20 ; $x++)
echo "\r\nlooping x $x of 20";
include_once(__DIR__ . "/temp_inner_loop.php");
?>
文件 temp_inner_loop.php 的内容
<?php
for ($y=0; $y < 20 ; $y++)
echo "\r\n\tlooping y $y of 20";
if ($y==5) continue 2;
?>
【问题讨论】:
我不确定的一件事是它使 temp_inner_loop.php 非常具体,只有将它包含在循环中才能适应。这限制了使其成为包含文件恕我直言的意义。 什么是continue 2
?
@vivek_23 "continue 接受一个可选的数字参数,告诉它应该跳到多少层封闭循环的末尾。默认值为 1,因此跳到当前循环的末尾。 "
@FrankerZ 谢谢。很高兴知道。看起来 PHP 提供了这种特权,并且并非在每种语言中都存在。
当我尝试时,我遇到了一个致命错误。所以自然它有一个单独的执行上下文。您可以删除continue 2
语句并查看它的打印效果。
【参考方案1】:
我不认为这是一个错误。请参阅错误跟踪器上的this post back in 2006。它指出:
PHP 中的“include”不是 C 中的“#include”。它不只是复制和粘贴您的代码。包含的文件有一个单独的执行上下文,即使它确实继承了一些东西,最值得注意的是来自包含范围的符号表。您还会注意到在包含的文件中写入“return”作为文件的返回,而不是可能包含在其中的函数。
这种跨文件的 goto 绝对不适合。
【讨论】:
谢谢@FrakerZ。我认为包含与“跨文件转到”一样好。以上是关于PHP 确实改变了循环的范围并在包含的文件中切换的主要内容,如果未能解决你的问题,请参考以下文章
如果在循环中包含PHP中的文件,它每次在循环中运行时都会访问该文件吗?
为啥在循环中更改此标签的 ForeColor 不会明显改变?