PHP基礎教程四之流程控制

本節講解的內容

  • 順序流程控制
  • 單分支
  • 雙分支
  • 多分支
  • switch
  • for
  • while
  • do…while
  • break
  • continue
  • goto

前言

PHP的流程控制和別的語言很相似,都是分爲好多情況,我們讀懂了代碼的流程,就大致讀懂了代碼的思想,初步理解了代碼的作用以及會出現什麼結果。php的流程大致分爲兩種,順序流程,分支流程,循環流程。

順序流程控制

順序流程說白了就是解析器會照着php的代碼,一行一行的進行解析;

如果我們的php代碼中,沒有任何的流程控制語句,那麼我們的php代碼就會順序執行. .

$a = 12;
$b = 13;
$c = 15;
$res = $a + $b * $c;
echo $res;

像上面的代碼,解析器就會一行行的進行解析,執行。

分支流程控制

分支流程就是在我們的代碼出現某種情況時,纔會執行的代碼。比如說符合某種情況,php中常見的分支有:

  • 單分支
  • 雙分支
  • 多分支

單分支

當我們的代碼符合某種情況時,執行特定的代碼
單分支的語言格式是:

    if(條件表達式){
        //代碼塊
    }

示例:

<?php

$a = 13;
if($a > 12){//$a符合大於12的條件纔會執行下面的這句話

    echo '$a的值大於12<br>';
}

echo '這裏是單分支外邊';
......結果.....
$a的值大於12
這裏是單分支外邊

流程圖
這裏寫圖片描述

在單分支的if語句中後面是用大括號括起來的。當分支裏面的代碼執行完畢,解析器會接着解析後面的代碼

雙分支

大家有沒有想過當上面的變量$a不符合條件的時候,難道什麼都不做,大多數不是這樣的,當if括號的表達式不滿足時,我們一般還有處理方案,這就是雙分支結構,語言格式

    if(條件表達式){
        //爲真時執行的代碼
    }else{
        //爲假時執行的代碼
    }

示例:

$a = 6;
if($a > 12){

    echo '$a的值大於12<br>';
}else{
    echo '$a的值小於12'
}

echo '這裏是單分支外邊';
......結果.....
$a的值小於12
這裏是單分支外邊

流程圖:
這裏寫圖片描述

在上面的代碼中,當$a不滿足大於12時,就會執行else裏面的代碼,然後纔會執行外面的代碼。if…else是成對出現的。但是也可以沒有else。

當代碼中出現多個if…else的時候,他們之間是沒有邏輯關係的,執行完一組if之後,就會去執行另外一組if。

多分支

有時候當我們的雙分支執行完之後,還有分支需要判斷,一直判斷下去,這時候就用到多分支。在多分支中 不一定非要有else,else if 這裏可以有多個.

基本的語法是:

if(條件表達式){
    語句
}else if(條件表達式){
    語句
}else if(條件表達式){
    語句
}...

示例:

<?php
$a = 3;
if($a > 10){
    echo '$a 大於10';
}else if($a > 2){
    echo '$a 小於等於10並且大於2';
}else{
    echo '$a小於等於2';
}
.....結果......
$a小於等於10並且大於2

流程圖:
這裏寫圖片描述

在上面的流程圖中可以看到,當$a不大於10的時候纔會向下執行,這很重要,然後判斷是否大於2,如果後面還有則接着執行下去,直到滿足條件。

switch

在上面的if…else中if裏面的條件表達式一般是表示範圍(也可以表示具體的值 如$a == 2),但是當我們使用多個具體值得時候,上面的代碼看上去就會很冗餘,這是就要使用到switch,switch也可以說是if…else的另一種寫法。

switch 語句類似於具有同一個表達式的一系列 if語句。很多場合下需要把同一個變量(或表達式)與很多不同的值比較,並根據它等於哪個值來執行不同的代碼。這正是 switch 語句的用途

switch的基本語法是:

switch(變量/表達式/值){
    case 變量/表達式/值:
        處理語句;
    break;
    case 變量/表達式/值:
        處理語句;
    break;
    case 變量/表達式/值:
        處理語句;
    break;
    default:
        上面的情況都不滿足執行的語句;
    break;
}

示例:

<?php

$a = 'b';

switch ($a) {
    case 'a':
        echo '$a的值是a';
        break;
    case 'b':
        echo '$a的值是b';
        break;
    case 'c':
        echo '$a的值是c';
        break;
    default:
        echo '$a的值不符合上面的全部情況';
        break;
}
.....結果.......

$a的值是b

流程圖:
這裏寫圖片描述

switch語句的思想和if很像,在switch括號裏面的值就是我們需要判斷的值,我們要判斷的值與case後面的值是否一樣,一樣的話執行case下面的語句,當不一樣的時候,執行下一個case語句。注意 case語句後面是一個冒號:;當所有的case執行完之後,都沒有符合條件的值,就執行default裏面的語句。

在上面我們可以看到在每個case語句的下面都有一個break,這是一個關鍵字,當解析器遇見break的時候,就會自動的跳出switch,這樣後面的case就不會執行。(遇見相同的就不向下執行)。

switch需要注意的地方:

  • 當一個case語句中的值和switch表達式的值匹配時,PHP纔開始執行語句。
  • 當執行case語句後,遇見break就退出,但是如果沒有break,則一直運行下去,直到遇見break或switch執行結束。
  • defaule裏面的語句是它匹配了任何和其他case都不匹配的情況。
  • case後面的類型可以使整型,浮點型,字符串,布爾值,array,null,通常情況下,我們一般用整數 或字符串。

循環流程控制

在開發中我們有時會有這樣的需求,我們需要打印一句話100次,這時候用單純的順序流程控制就會很麻煩,但是也能做,但如果是一萬次呢…這時候就需要我們想另一種解決思路,我們能不能利用循環,循環的輸出一句話,並且控制循環次數,這樣我們就會很順利的輸出我們想要的結果。

for循環結構

for循環在我們的開發中是最常見和最常用到的循環,這種循環是在我們知道循環次數的時候,首選的結構,像上面的一萬次,我們已經知道了需要循環一萬次。學習for循環最主要的是看懂for循環的執行流程。按着for的執行流程,我們可以清晰的知道for循環是在哪裏退出,在哪裏需要在循環。

語法結構:

for(循環初始值,循環初始值...;循環條件;增量,增量){
        語句循環體;
}

示例:

for($i = 0; $i < 10; $i++){
    echo '這是for循環<br>';
}
....結果....
echo 這是for循環(十次);

流程圖:
這裏寫圖片描述

在上面的流程圖中我們可以看到for循環的執行順序,for循環只有在爲假的時候跳出循環。

for循環的執行順序:

  1. 先執行變量初始化$a = 0;在整個for循環中,這句話只執行一次。
  2. 判斷$a的值是否小於10,如果小於10,執行for循環裏面的語句,如果不小於則退出循環。
  3. 當執行完for循環裏面的語句,執行增量表達式,$a++(看前面的遞增、遞減運算符),
  4. $a增加1之後再進行條件判斷,$a是否小於10,如果小於10,執行for循環裏面的語句,如果不小於則退出循環。
  5. 當$a不小於10的時候,直接跳出循環,執行for循環後面的語句。

明白for循環的執行順序非常重要,可以看着案列,自己動手畫一畫。

for循環打印99乘法表

for循環是可以嵌套使用的,當進行嵌套的時候,外面的循環執行一次,裏面的for循環執行完才執行外面。

<?php

for($i = 1; $i <= 9; $i++){ //控制乘法表的層數,第一層是1,第二層是2,一直到9;
    for($j = 1; $j <= $i; $j++){ //每一層的個數,第一層是1 * 1 = 1;每一層的最大的不能大於層數,像第一層,不能出現1 * 2 = 2;
        echo $i . '*' . $j . '=' . $i * $j . '  '; //進行顯示
    }
    echo '<br>'; //一層顯示完後,記着換行。
}

結果:
這裏寫圖片描述

99乘法表,按照for循環的流程一步步執行,但是for循環的判斷條件需要找準,也就是for循環的循環次數。

while循環結構

當我們的循環次數不能確定的時候,這時候for循環就顯得有些無力,這時候我們可以選擇while循環。while循環當沒有特定條件的時候,就是一個死循環,也就是解析器會一直執行,永遠不會停止,所以我們在用while循環的時候,注意while循環跳出循環的條件。

while循環的語法結構:

while(循環條件){
    循環體語句;
}

示例:

<?php

$a = 12;
while($a < 20){
    echo '$a的值是' . $a . '<br>';
    $a++;
}
....結果....
echo $a的值是12....

流程圖:
這裏寫圖片描述

上面的代碼,初始值$a是在while的外面,我們可能不知道需要循環多少次,但是我們知道當$a的值小於20就一直循環,但是我們不能讓$a的值不變,如果$a的值不變,while循環就是一個死循環。所以在循環體裏面有一個$a的增長語句。

do…while循環控制

do…while和while循環大致一樣,但是有一點不同,do…while循環的循環體是在do裏面寫着,判斷條件是在while裏面寫着,並且do…while不管是否滿足while裏面的條件,都會執行一次do裏面的循環體。

do...while語法結構:

do{
    循環體語句;
}while(判斷條件);

示例:

<?php

$a = 12;
do{
    echo '$a的值是' . $a . '<br>';
    $a++;
}while($a < 20);

流程圖:
這裏寫圖片描述

從流程圖中可以看到是先執行循環體,在進行判斷。
當不滿足條件後跳出循環。

流程控制中用到的關鍵字

break

break的作用是當滿足某種情況時,不想再循環了,跳出當前循環,也就是結束掉當前的循環,不管你有沒有滿足最初條件,強制退出。
break 可以結束 for, while,do-while 或者 switch 結構的執行 ,同時break 可以接受一個可選的數字參數來決定跳出幾重循環(用於多重循環)。

示例:

<?php

for($i = 0; $i < 10; $i++){
    if($i == 5){
        break;
    }
    echo '$i的值是' . $i . '<br>';
}

結果:
這裏寫圖片描述

流程圖:
這裏寫圖片描述

從結果中可以看到,當$i的值等於5的時候,就break,跳出循環,所以輸出語句輸出了5句。

continue

continue在循環結構中用來跳過本次循環,然後接着進行判斷是否滿足條件。注意:是跳出單次循環,而break是跳出整個循環結構。
continue 可接受一個可選的數字參數來決定跳過幾重循環到循環結尾

示例:

<?php

for($i = 0; $i < 10; $i++){
    if($i == 5){
        continue;
    }
    echo '$i的值是' . $i . '<br>';
}

結果:
這裏寫圖片描述

流程圖:
這裏寫圖片描述

在流程圖中可以看到當滿足$i == 5的時候,continue跳出本次循環,這時下面的輸出就不能輸出,所以看到在結果中沒有輸出$i == 5這種情況。

goto

goto操作符可以用來跳轉到程序中的另一位置。該目標位置可以用目標名稱加上冒號來標記。

示例:

<?php

$a = 12;
goto A;
echo '這是第一個位置';
A:
echo '這是第二個位置';
.....結果......
這是第二個位置

可以看到其中一個輸出語句沒有輸出,這是因爲goto跳轉到了A這個位置,注意A後面是一個冒號:
同時goto可以使用在循環中,這樣也可以跳出循環。
使用注意事項:

  1. 使用注意事項: PHP中的goto有一定限制,只能在同一個文件和作用域
    中跳轉,也就是說你無法跳出一個函數或類方法,也無法跳入到另一個函數。
  2. 常見的用法是用來跳出循環或者switch,可以代替多層的break

總結

流程控制,在開發中不可避免的,我們寫的代碼總是在流程控制中執行,明白了PHP的流程控制也就明白了代碼的整體框架。同時for循環while循環等自己可以進行加深,不管什麼編程語言,只有自己不停地敲代碼纔會明白其中的道理。所以要多敲代碼,多練習。

發佈了38 篇原創文章 · 獲贊 28 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章