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
英文地址,請注明出處:http://en.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 …