目录
PHP循环结构
循环结构就是可以在满足条件的情况下反复执行某一个操作。PHP提供了while
、do while
、for
和foreach
4 个循环控制语句。
while 循环
while
循环是 PHP 中最简单的循环类型。while
语句的基本格式是:
while (表达式)
语句块;
# 当while语句控制执行一条语句时可以加花括号“{}”,也可以不加。如果是多条语句的代码块,则一定要用花括号“{}”括起来。或者用替代语法:
while (表达式):
语句块;
endwhile;
while
语句的含意很简单,它告诉 PHP 只要 while
表达式的值为 true
就重复执行嵌套中的循环语句。
<?php
$num = 1;
while($num <= 10) {
echo $num;
$num++;
}
// 也可以写成下面形式:
$num = 1;
while($num <= 10) :
echo $num;
$num++;
endwhile;
do while 循环
do while
循环和 while
循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。
不论表达式的结果如何 do while 循环语句都会执行一次
do {
语句块;
} while (表达式);
# “语句块”也可以是一条语句或一个复合语句(代码块)。当 do while 语句语句块中只有一条语句时,也可以省略大括号{ }。
注意:使用 do while 时最后一定要有一个分号
;
,分号也是 do while 循环语法的一部分。
<?php
$num = 1;
do {
echo $num;
$num++;
} while ($num <= 10);
for 循环
for
循环的格式和前面介绍的while
和 do while
两种循环语句不一样,for
循环将控制循环次数的变量预先定义在for
语句中。
for (表达式; 表达式; 表达式)
语句块;
# PHP 也支持用冒号的 for 循环的替代语法。
for (表达式; 表达式; 表达式) :
语句块;
endfor;
第一个表达式在循环开始前无条件求值(并执行)一次。
第二个表达式在每次循环开始前求值。如果值为
true
,则继续循环,执行嵌套的循环语句。如果值为false
,则终止循环。第三个表达式在每次循环之后被求值(并执行)。
通过下面两个示例好好体会一下:
<?php
// 示例 1
$sum = 1;
for ($i = 2; $i <= 100; $i++) {
$sum+=$i;
}
echo $sum;
// 示例2
$sum = $i = 1;
for (;;) {
if($i > 100){
break; //跳出循环,下面学习。
}elseif($i > 1){
$sum+=$i;
}
$i++;
}
echo $sum;
foreach 循环
foreach
语法结构提供了遍历数组的简单方式。foreach
仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
//格式1
foreach (array_expression as $value){
statement
}
//格式2
foreach (array_expression as $key => $value){
statement
}
第一种格式遍历 array_expression 数组时,每次循环将数组的值赋给 $value;第二种遍历不仅将数组值赋给 $value,还将键名赋给 $key。
<?php
$array = [0, 1, 2];
foreach ($array as $val){
echo "值是:" . $val ;
echo "<br/>";
}
foreach ($array as $key => $value) {
echo "键名是:" . $key . "值是:" . $value;
echo "<br/>";
}
注意:在 PHP 5 版本中,当 foreach 开始循环执行时,每次数组内部指针都会自动向后移动一个单元,但在 PHP 7 中不会修改类似 current() 和 key() 函数所使用的数组内部指针。
break 关键字
break
结束(跳出)当前 for
,foreach
,while
,do while
或者 switch
结构的执行。
<?php
while (true) {
$num = rand(1, 10);
echo $num.'<br/>';
if ($num == 5) {
echo '退出循环!<br>';
break;
}
}
break
语句还可以指定跳出几层循环,默认值是 1。语法格式为break n;
<?php
while (true) {
$num = rand(1, 10);
echo '寻找相同随机数:'.$num.'<br/>';
for($i=1;;$i++){
$num2 = rand(1, 10);
echo '第'.$i.'次寻找失败,当前值('.$num2.')<br>';
if ($num2 == $num) {
echo '第'.$i.'次寻找成功并退出循环!<br>';
break 2;
}
}
}
continue 关键字
continue 语句只能用在循环语句内部,功能是跳过该次循环,继续执行下一次循环结构。
<?php
for($i = 1;$i<100;$i++){
if($i%100==2){
continue ;
}
echo $i.'<br/>';
}
和break
语句一样,还可以指定跳出几层循环,默认值是 1。语法格式为continue n;
goto 操作符
goto
操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto
之后接上目标位置的标记。
-
PHP 中的
goto
有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用goto
代替多层的break
。 -
PHP 中并不鼓励滥用 goto,滥用 goto 会导致程序的可读性严重下降。
-
goto 操作符仅在 PHP5.3 及以上版本有效。
goto 操作符的语法格式如下:
goto 标志;
#代码块;
标志:
#代码块;
<?php
echo '准备...<br>';
goto a;
echo '开始...<br';
a:
echo '结束...<br>';
die()和exit()语法
在 PHP 中,die() 和 exit() 的用法和作用是一样的,不管它在哪个结构中,输出一个消息并且退出当前脚本。其实 exit 和 die 这两个名字指向的是同一个函数,die() 是 exit() 的别名。
exit(message);
die(message);
message 为一个可选参数(可以为空),可以是字符串类型也可以是 int 类型。如果 message 为字符串类型,则函数会打印该字符串并退出当前脚本;如果 message 为 int 类型,那么该值会作为退出状态码,并且不会被打印输出。 退出状态码的取值范围在 0 至 254 之间,注意:不要使用被 PHP 保留的退出状态码 255。 状态码 0 用于成功中止程序。
举个栗子:
<?php
echo '我是开始<br>';
exit('没有结束可言!');
echo '我是结束<br>';
# exit 是个语法结构,如果没有 status 参数要传入,可以省略圆括号。
# 下面的例子单独运行不然执行不到。
echo '我是开始<br>';
exit;
echo '我是结束<br>';
die() 的使用方法和 exit() 相同,就不单独举例子了。
**扩展:**有兴趣的可以去了解,register_shutdown_function函数,注册一个会在php中止时执行的函数。
<?php
function shutdown()
{
echo 'php中止时执行的函数<br>';
}
register_shutdown_function('shutdown');
echo '我是开始<br>';
exit;
echo '我是结束<br>';
include 和 require 语句
include 和 require 语句
包含并运行指定文件。
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path指定的目录寻找。如果在 include_path下没找到该文件则 include
最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include
结构会发出一条警告并且程序会接着向下执行。这一点和 require
不同,后者会发出一个致命错误。
include('filename') 或者 include 'filename'
require('filename') 或者 require 'filename'
require_once 和 require_once 语句
include_once
语句和 include
语句类似,唯一的区别就是如果包含的文件已经被包含过,就不会再次包含,且 include_once
会返回 true
。include_once 可以确保在脚本执行期间同一个文件只被包含一次,以避免函数重定义、变量重新赋值等问题。
require_once
语句和 require
语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
提示
谢谢阅读…