# 流程控制
[TOC]
流程控制,不管在那個編程語言當中,都是非常至關重要的一個環節!因為它控制程序的走向,不同的走向實現的功能可能就有所不相同!
3大流程控制:
1. 順序結構 : 程序運行的自然狀態,就是從前往后(從上到下)運行程序。
2. 分支結構: 程序運行過程中,根據判斷條件的不同結果,來**執行不同的分支**(每次只執行一個分支)。
3. 循環結構: 程序運行過程中,根據判斷條件的不同結果,來決定是**再執行一遍,還是不執行**。
## 條件語句
>[success] 條件語句用于根據不同條件執行不同動作
### if

* [ ] 格式一中,條件成立執行代碼塊內容,且如果只有一條語句可以省略{}
* [ ] 格式二中:條件成立執行代碼1內容,條件不成立執行代碼塊2的內容
* [ ] 格式三種:條件1成立執行代碼塊1,如果不成立繼續向下執行條件2,如果條件2成立執行代碼塊2,如果條件2也不成立繼續向下執行條件3,如果條件3成立執行代碼塊三,如果上述條件都不成立最終執行的就是代碼塊4
### switch
```
switch?(變量)
{
case?值1:
??? 執行代碼塊1
????break;
case?值2:
????執行代碼塊2
????break;
case?值3:
????執行代碼塊3
????break;
default:
????如果都不匹配,默認執行的代碼塊
}
```
* [ ] switch分支語句根據一個變量的不同取值而執行不同的程序語句
* [ ] 工作原理:首先設置表達式 (通常是一個變量)。隨后表達式的值會與結構中的每個 case 的值做比較。如果存在匹配,則與該 case 關聯的代碼塊會被執行。使用 break 來阻止代碼自動地向下一個 case 運行。 如果沒有設置break,那么他將會一直向下執行
* [ ] **case表達式可以是整型、浮點數和字符串。不能用數組或對象**。
* [ ] default 語句為默認執行的代碼
## 循環結構
>[success] 循環執行代碼塊指定的次數,或者當指定的條件為真時循環執行代碼塊
### while
```
變量初始化
while (條件為真) {
要執行的代碼;
變量更新;
}
```
* [ ] 只要指定的條件為真,while 循環就會執行代碼塊。
* [ ] 在PHP中循環的三個要素,變量初始化與條件判斷和變量更新,缺一不可!!!
### do while
```
變量初始化
do{
循環體代碼;
變量更新;
}while(條件判斷)
```
while是**條件成立**才會去執行循環體內的代碼塊內容,而do while是**先執行一次**循環體內的代碼塊內容,再去進行條件判斷,如果為真在進入循環體內執行代碼塊,如果不為真那么不會只想循環體代碼塊,而是繼續向下執行
### for
```
for(變量初始化;判斷條件;變量更新)
{
循環體內代碼塊
}
```
執行的流程:首先執行變量初始化,之后再進行條件的判斷,如果**條件不成立**循環體內的代碼不會去執行,循環到此也就結束了,會執行for下面的代碼。如果條件成立,那么會進入到循環體內執行循環體內的代碼一次,循環體內代碼執行完以后,在返回進行變量的更新。之后再繼續走一遍執行的流程直到條件不成立為止,繼續下一條代碼的執行
### foreach
```
foreach(遍歷的數據 as $k(下標) => $v(值))
{
代碼塊
}
```
foreach不僅能用于數組還能用于對象,當 foreach開始執行時,數組內部的指針會自動指向第一個單元,每次循環中,當前單元的鍵和值分別被賦給 和?value,并且數組內部的指針向前移一步。foreach效率更高,盡量用foreach代替while和for循環
foreach原理圖:

>[danger] 注意:對于高效率的PHP寫法來說,foreach效率是最高的,所以在使用循環時推薦是使用foreach
### brank
```
for($i=0;$i<10;$i++)
{
echo $i;
break;
# 直接跳出本個循環,PHP代碼繼續向下執行
}
# 輸出結果為0;
```
break 結束當前 for,foreach,while,do-while或者 switch 結構的執行,使用brank直接跳出本次循環,**不會再次執行循環**
### continue
```
for($i=0;$i<10;$i++)
{
if($i == 8)
{
continue;
# 運行到這里直接跳過本次循環,循環條件如果還是成立的會繼續執行循環
}
echo $i;
}
# 輸出結果0,1,2,3,4,5,6,7,9
```
continue語句用來**跳過本次循環中剩余的代碼**,并在條件為true時開始執行下一次循環
## 終止腳本
die與exit
PHP代碼執行的順序,從上到下依次執行,如果沒特殊情況腳本不會到一某處就終止腳本的執行,如果此時我們想要腳本執行到某一處就終止腳本的執行,那么這時我們可以使用 exit與die二個函數來終止腳本繼續向下執行,die與exit二個函數終止腳本之前可以輸出一段string類型的提示信息,注意他們二個沒有返回的值!
```
echo 1;
echo 2;
die('到這里腳本就終止了,不會繼續向下執行')或使用exit('到這里腳本就終止,不會繼續向下執行')
echo 3;
```
## 延緩執行
sleep
延緩執行也是非常好理解的,簡單的來說就是PHP腳本執行到sleep時,會延遲執行下面的代碼,sleep傳遞的是一個int類型的正整數,不能為負數,成功返回0,錯誤返回false
```
echo 1;
echo 2;
sleep(5); # 到這里延遲5秒鐘執行下面的代碼
echo 3;
```
- 基礎
- 安裝PHP
- 語言基礎
- 變量
- 變量操作
- 超全局數組變量
- 變量作用域
- 變量傳值方式
- 常量
- 數據類型
- 運算符
- 流程控制
- 文件包含
- 錯誤處理
- 字符串操作
- 數組
- 函數
- 進階
- 面向對象
- 提高
- TP
- 安裝項目
- 框架基礎知識
- 命令創建模塊
- URL生命周期
- 路由操作
- Request請求類
- 參數綁定
- 依賴注入
- 模板操作
- 查詢操作
- 添加操作
- laravel
- ☆目錄結構
- CSRF攻擊
- ☆路由
- ☆控制器
- ☆請求類
- ☆視圖
- ☆模板繼承
- ☆表單驗證
- ☆DB類
- ☆模型
- ☆數據庫遷移
- 類型、修飾、索引
- ☆數據填充
- ☆數據分頁
- ☆session處理
- ☆中間件
- ☆緩存操作
- ☆文件上傳
- ☆接口操作
- ☆擴展插件
- restful
- 工作
- 工作記錄
- QQ登錄
- 新浪登錄
- 微信登錄
- sphinx搜索
- 數據庫
- MySQL
- ☆數據庫操作
- ☆數據表操作
- ☆數據的操作
- 待修改
- 優化
- 存儲引擎選擇
- 列表類型選擇
- 范式
- 慢日志查詢
- 精準時間記錄查詢
- 計劃任務 explain
- 索引
- 索與事務
- 查詢緩存
- 存儲過程
- 觸發器
- 分區
- 分表
- sphinx
- 讀寫分離
- 搜索優化
- 網站靜態化
- Memcache
- Mongodb
- Readis
- php使用redis
- 服務器
- Linux
- 目錄結構
- 常用命令
- VIM編輯器
- 用戶與用戶組
- 權限管理
- 運行級別
- 網絡模式
- ssh
- 軟件安裝
- 計劃任務
- Ubuntu
- 編譯PHP7.3
- 編譯MySQL
- 編譯Nginx
- apache虛擬機配置
- 安裝composer
- Nginx
- Git