PHP语法基础篇(五):流程控制

任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句)。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。本篇文章将记录流程控制的学习过程。

目录

一、条件语句

1、if 语句

2、if...else 语句

3、if...elseif...else 语句

4、switch 语句 

4.1、break 关键字

4.2、default 关键字

4.3、公共代码块

二、循环

1、while 循环

2、do...while 循环

3、for 循环

4、foreach 循环

三、break 语句

四、continue 语句


一、条件语句

条件语句用于基于不同的条件执行不同的操作。
在 PHP 中,有以下条件语句:
  • if 语句 - 如果某个条件为真,则执行一些代码。
  • if...else 语句 - 如果一个条件为真,则执行一些代码,如果该条件为假,则执行另一段代码。
  • if...elseif...else 语句 - 对两个以上的条件执行不同的代码。
  • switch 语句 - 选择要执行的多个代码块之一。

1、if 语句

if 结构是很多语言包括 PHP 在内最重要的特性之一,它允许按照条件执行代码片段。

语法

if (expr) {// 如果 expr 的值为 true,执行此处的代码;
}

示例

$a = 5;
$b = 1;
if ($a > $b) {echo "a > b";
}

if 语句可以使用逻辑运算符进行多个条件的检查。

$month = 3;
if ($month == 1 || $month == 2 || $month == 3) {echo "$month 月是第一季度";
}

 if 语句可以无限层地嵌套在其它 if 语句中,这给程序的不同部分的条件执行提供了充分的弹性。

$a = 10;
$b = 8;
$c = 6;
if ($a > $b) {echo "a 大于 b";if ($a > $c) {echo "<br>";echo "a 也大于 c";}
}

2、if...else 语句
 

经常需要在满足某个条件时执行一组语句,而在不满足该条件时执行其它语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if 语句中的表达式的值为 false 时执行语句。

语法

if (expr) {// 如果 expr 的值为 true,执行此处的代码;
} else {// 如果 expr 的值为 false,执行此处的代码,else 语句不是必需的;
}

示例

$a = 8;
$b = 10;
if ($a > $b) {echo "a 大与 b";
} else {echo "a 不大于 b";
}

3、if...elseif...else 语句

elseif,是 if 和 else 的组合。和 else 一样,它延伸了 if 语句,可以在原来的 if 表达式值为 false 时执行不同语句。但是和 else 不一样的是,它仅在 elseif 的条件表达式值为 true 时执行语句。在一个 if 语句中可以有多个 elseif,其中将会执行第一个表达式值为 true(如果有的话)的 elseif。

语法

if (expr1) {// 如果 expr1 的值为 true,执行此处的代码;
} elseif (expr2) {// 如果 expr1 的值为 false,expr2 的值为 true,执行此处的代码;
} elseif (expr3) {// 如果 expr1 和 expr2 的值都为 false,expr3 的值为 true,执行此处的代码;
}
...
else {// 如果上面的条件都为 false,执行此处的代码;
}

示例

$score = 80;
if ($score >= 90) {echo "优秀";
} elseif ($score >= 80) {echo "良好";
} elseif ($score >= 60) {echo "及格";
} else {echo "不及格";
}

elseif 的语句仅在之前的 if 和所有之前 elseif 的表达式值为 false,并且当前的 elseif 表达式值为 true 时执行。

4、switch 语句 

switch 语句类似于具有同一个表达式的一系列 if 语句。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。

语法

switch (表达式) {case 标签 1:// 代码块;break;case 标签 2:// 代码块;break;case 标签 3:// 代码块;break;...default:// 代码块;
}
执行流程:
  • 表达式只计算一次;
  • 将表达式的值与每个 case 的值进行比较;
  • 如果找到匹配项,则执行相关联的代码块;
  • break 关键字会跳出 switch 块;
  • 如果没有匹配项,则执行 default 代码块。

示例

$season = "spring";
switch ($season) {case "spring":echo "春天";break;case "summer":echo "夏天";break;case "autumn":echo "秋天";break;case "winter":echo "秋天";break;default:echo "输入有误";
}

4.1、break 关键字

遇到 break 关键字时,它会跳出 switch 块。这将停止执行更多代码,并且不再测试更多 case。最后一个块不需要 break,因为该块无论如何都会结束。

注意:如果不在 case 的语句段最后写上 break,则 PHP 将继续执行下一个 case 中的语句段。即使评估结果与 case 不匹配,下一个 case 也将被执行!

 接下来,我们将上面 switch 示例中 case "spring" 代码中的 break 移除,看一下会产生什么效果?

$season = "spring";
switch ($season) {case "spring":echo "春天";case "summer":echo "夏天";break;case "autumn":echo "秋天";break;case "winter":echo "秋天";break;default:echo "输入有误";
}

执行输出“春天夏天”。由此可以验证,当没有 break 语句后,将会执行下一个 case 中的语句段,即使 case 不匹配。所以注意不要缺失 break 语句,以免造成逻辑错误。

4.2、default 关键字

default 关键字指定了在没有 case 匹配时要执行的代码。default 不是必需的。

$season = "chuntian";
switch ($season) {case "spring":echo "春天";case "summer":echo "夏天";break;case "autumn":echo "秋天";break;case "winter":echo "秋天";break;default:echo "输入有误";
}

执行输出“输入有误”。由于 case 都没有得到匹配,则执行 default 语句块中的语句。

4.3、公共代码块

如果想让多个 case 使用相同的代码块,将 case 中的语句置为空,这样就将控制转移到了下一个 case 中的语句。

示例

$month = 6;
switch ($month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:echo "每月有31天";break;case 4:case 6:case 9:case 11:echo "每月有30天";break;case 2:echo "平年有28天,闰年有29天";break;default:echo "出错了";
}

二、循环

只要满足特定条件,循环就会一次又一次地执行相同的代码块。
在PHP中,有以下循环类型:
  • while - 只要指定条件为真,就循环代码块。
  • do...while - 执行代码块一次,然后只要指定条件为真,就重复循环。
  • for - 循环代码块指定的次数。
  • foreach - 对数组中的每个元素循环代码块。

1、while 循环

while 语句的含意很简单,它告诉 PHP 只要 while 表达式的值为 true 就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。如果 while 表达式的值一开始就是 false,则循环语句一次都不会执行。

语法

while (expr) {// 如果 expr 为 true,循环执行此处的代码;如果 expr 为 false,则退出循环
}

示例

// 输出 1~10
$i = 1;
while ($i <= 10) { // 当 $i <= 10 时,输出 $i 的值echo $i;echo "<br>";$i++; // 每次循环更改 $i 的值,在现有值的基础上加1
}

注意:需要更改条件判断的值,否则循环将永远继续。通常将永远执行的循环叫做死循环,要尽量避免死循环的出现。

while 循环不会运行特定次数,而是在每次迭代后检查条件是否为真,以此来判断是否执行下次循环。

2、do...while 循环

do...while 循环和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和一般的 while 循环主要的区别是 do...while 的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 false 则整个循环立即终止)。

语法

do {// 如果 expr 为 true,循环执行此处的代码;如果 expr 为 false,则退出循环;此处代码在开始时必定执行一次
} while (expr);

示例

$i = 10;
do {echo $i;echo "<br>";$i--;
} while ($i < 5);
// 即使条件为 false,但是循环还是执行了一次

3、for 循环

for 循环 - 循环代码块执行指定的次数。

语法

for (expr1; expr2; expr3) {// 代码块;
}
  • 第一个表达式(expr1)在循环开始前无条件求值(并执行)一次。
  • expr2 在每次循环开始前求值。如果值为 true,则继续循环,执行循环语句。如果值为 false,则终止循环。
  • expr3 在每次循环之后被求值(并执行)。
  • 每个表达式都可以为空或包括逗号分隔的多个表达式。表达式 expr2 中,所有用逗号分隔的表达式都会计算,但只取最后一个结果。expr2 为空意味着将无限循环下去。

示例

// 输出 1~10
for ($i = 1; $i <= 10; $i++) {echo $i . "<br>";
}

4、foreach 循环

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。foreach 循环在本篇文章中不做使用说明,在之后的数组篇章中说明如何使用。


三、break 语句

break 语句结束执行当前的 for、foreach、while、do...while、switch 结构。

break 接受一个数字的可选参数,决定跳出几重循环。默认值是 1,仅仅跳出最近一层嵌套结构。

$i = 0;
while (++$i) {switch ($i) {case 5:echo "At 5<br />\n";break 1;  /* 只退出 switch. */case 10:echo "At 10; quitting<br />\n";break 2;  /* 退出 switch 和 while 循环 */default:break;}
}

四、continue 语句

continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。

// 输出 1~10 中的偶数
for ($i = 1; $i <=10; $i++) {if ($i % 2 == 1) { // 跳过奇数continue;}echo $i . "<br>";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910301.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么隐藏关闭或恢复显示输入法的悬浮窗

以搜狗输入法为例&#xff0c;隐藏输入法悬浮窗 悬浮窗在输入法里的官方叫法为【状态栏】。 假设目前大家的输入法相关显示呈现如下状态&#xff1a; 那我们只需在输入法悬浮窗&#xff08;状态栏&#xff09;的任意位置鼠标右键单击&#xff0c;调出输入法菜单&#xff0c;就…

Electron (02)集成 SpringBoot:服务与桌面程序协同启动方案

本篇是关于把springboot生成的jar打到electron里&#xff0c;在生成的桌面程序启动时springboot服务就会自动启动。 虽然之后并不需要这种方案&#xff0c;更好的是部署[一套服务端&#xff0c;多个客户端]...但是既然搭建成功了&#xff0c;也记录一下。 前端文件 1、main.js…

2025年计算机应用与神经网络国际会议(CANN 2025)

2025 International Conference on Computer Applications and Neural Networks &#xff08;一&#xff09;会议信息 会议简称&#xff1a;CANN 2025 大会地点&#xff1a;中国重庆 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 &#xff08;二&#x…

振动分析中的低频噪声问题:从理论到实践的完整解决方案

前言 在振动监测和结构健康监测领域&#xff0c;我们经常需要从加速度信号计算速度和位移。然而&#xff0c;许多工程师在实际应用中都会遇到一个令人困扰的问题&#xff1a;通过积分计算得到的速度和位移频谱中低频噪声异常放大。 本文将深入分析这个问题的根本原因&#xf…

ncu学习笔记01——合并访存

全局内存通过缓存实现加载和存储过程。其中&#xff0c;L1为一级缓存&#xff0c;每个SM都有自己的L1&#xff1b;L2为二级缓存&#xff0c;L2则被所有SM共有。 数据从全局内存到SM的传输过程中&#xff0c;会去L1和L2中查询是否有缓存。对全局内存的访问将经过L1&#xff1b;…

2012 - 正方形矩阵

​​​​题目描述 晶晶同学非常喜欢方形&#xff0c;她希望打印出来的字符串也是方形的。老师给了晶晶同学一个字符串"ACM"&#xff0c;晶晶同学突发奇想&#xff0c;如果任意给定义一个整数n&#xff0c;能不能打印出由这个字符串组成的正方形字符串呢&#xff1f;…

C++中set的常见用法

在 C 里&#xff0c;std::set属于标准库容器的一种&#xff0c;其特性是按照特定顺序存储唯一的元素。下面为你详细介绍它的常见使用方法&#xff1a; 1. 头文件引入 要使用std::set&#xff0c;需要在代码中包含相应的头文件&#xff1a; #include <set> 2. 集合的定…

stm32移植freemodbus

1、设置串口 开启串口中断 2、设置定时器 已知在freemodbus中默认定义&#xff1a;当波特率大于19200时&#xff0c;判断一帧数据超时时间固定为1750us&#xff0c;当波特率小于19200时&#xff0c;超时时间为3.5个字符时间。这里移植的是115200&#xff0c;所以一帧数据超时…

鸿蒙next 使用canvas实现ecg动态波形绘制

该代码可在Arkts 与 前端使用&#xff0c;基于canvas 仓库地址&#xff1a;https://gitee.com/harmony_os_example/harmony-os-ecg-waveform.git 代码中的list数组为波形数据&#xff0c;该示例需要根据自己业务替换绘制频率&#xff0c;波形数据&#xff0c;ecg原始数据生成…

基于原生能力的键盘控制

基于原生能力的键盘控制 前言一、进入页面TextInput获焦1、方案2、核心代码 二、点击按钮或其他事件触发TextInput获焦1、方案2、核心代码 三、键盘弹出后只上抬特定的输入组件1、方案2、核心代码 四、监听键盘高度1、方案2、核心代码 五、设置窗口在键盘抬起时的页面避让模式为…

大数据治理域——数据存储与成本管理

摘要 本文主要探讨了数据存储与成本管理的多种策略。介绍了数据压缩技术&#xff0c;如MaxCompute的archive压缩方法&#xff0c;通过RAID file形式存储数据&#xff0c;可有效节省空间&#xff0c;但恢复时间较长&#xff0c;适用于冷备与日志数据。还详细阐述了数据生命周期…

国产Linux银河麒麟操作系统上使用自带openssh远程工具SSH方式登陆华为交换机或服务器

在Windows和Linux Debian系统上我一直使用electerm远程工具访问服务器或交换机&#xff0c; 一、 electerm简介 简介&#xff1a;electerm是一款开源免费的SSH工具&#xff0c;具有良好的跨平台兼容性&#xff0c;适用于Windows、macOS、Linux以及麒麟操作系统。特点&#xf…

Logback 在java中的使用

Logback 是 Java 应用中广泛使用的日志框架&#xff0c;以下是其核心使用方法及最佳实践&#xff1a; 1. 引入依赖 在 Maven 或 Gradle 项目中添加 Logback 及 SLF4J 依赖&#xff1a; <!-- Maven --> <dependency><groupId>ch.qos.logback</groupId>…

Axure应用交互设计:中继器—整行、条件行、当前行赋值

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:对中继器中:整行、符合某种条件的任意行、当前行的赋值操作 课程视频:

ToolsSet之:TTS及Morse编解码

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用&#xff0c;应用基本功能介绍可以查看以下文章&#xff1a; Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264其中Text菜单中的TTS & Morse可用于将文本转换…

【C++】编码传输:创建零拷贝帧对象4:shared_ptr转unique_ptr给到rtp打包

【C++】编码传输:创建零拷贝帧对象3: dll api转换内部的共享内存根本原因 你想要的是基于 packet 指向的那个已有对象,拷贝(或移动)出一个新的 VideoDataPacket3 实例,因此需要把那个对象本身传进去——也就是 *packet。copilot的原因分析与gpt一致 The issue is with t…

基于UDP的套接字通信

udp是一个面向无连接的&#xff0c;不安全的&#xff0c;报式传输层协议&#xff0c;udp的通信过程默认也是阻塞的。使用UDP进行通信&#xff0c;服务器和客户端的处理步骤比TCP要简单很多&#xff0c;并且两端是对等的 &#xff08;通信的处理流程几乎是一样的&#xff09;&am…

华为CE交换机抓包

capture-packet interface 100GE1/0/5 destination file 001.cap packet-len 64 注&#xff1a;早期版本&#xff08;disp device&#xff09;可能在系统视图下&#xff08;sys&#xff09; 抓完包后可以看到对应文件&#xff08;早期版本在根目录下&#xff09;&#xff1a;…

Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作

&#x1f3af; 今日目标 掌握 DataFrame 的条件筛选&#xff08;布尔索引&#xff09;学会多条件筛选、逻辑运算熟练使用排序&#xff08;sort_values&#xff09;提升数据组织力结合列选择进行数据提取分析 &#x1f9ea; 一、列选择与基本筛选 ✅ 选择单列 / 多列 df[&quo…

Vite项目初始化与配置

下面,我们来系统的梳理关于 Vite 项目初始化与配置 的基本知识点: 一、Vite 核心概念与优势 1.1 什么是 Vite? Vite(法语意为 “快速”)是新一代的前端构建工具,由 Vue.js 作者尤雨溪开发。它解决了传统构建工具(如 Webpack)在开发环境中的性能瓶颈问题。 1.2 Vite …