本節講解的內容
順序流程式控制制
單分支
雙分支
多分支
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迴圈的執行順序:
先執行變數初始化$a = 0;在整個for迴圈中,這句話只執行一次。
判斷$a的值是否小於10,如果小於10,執行for迴圈裡面的語句,如果不小於則退出迴圈。
當執行完for迴圈裡面的語句,執行增量運算式,$a++(看前面的遞增、遞減運算子),
當$a增加1之後再進行條件判斷,$a是否小於10,如果小於10,執行for迴圈裡面的語句,如果不小於則退出迴圈。
當$a不小於10的時候,直接跳出迴圈,執行for迴圈後面的語句。
明白for迴圈的執行順序非常重要,可以看著案列,自己動手畫一畫。
for迴圈列印99乘法表
for迴圈是可以嵌套使用的,當進行嵌套的時候,外面的迴圈執行一次,裡面的for迴圈執行完才執行外面。
<?phpfor($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 可以接受一個可選的數字參數來決定跳出幾重迴圈(用於多重迴圈)。
樣本:
<?phpfor($i = 0; $i < 10; $i++){ if($i == 5){ break; } echo '$i的值是' . $i . '<br>';}
結果:
流程圖:
從結果中可以看到,當$i的值等於5的時候,就break,跳出迴圈,所以輸出語句輸出了5句。
continue
continue在迴圈結構中用來跳過本次迴圈,然後接著進行判斷是否滿足條件。注意:是跳出單次迴圈,而break是跳出整個迴圈結構。
continue 可接受一個可選的數字參數來決定跳過幾重迴圈到迴圈結尾
樣本:
<?phpfor($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可以使用在迴圈中,這樣也可以跳出迴圈。
使用注意事項:
使用注意事項: PHP中的goto有一定限制,只能在同一個檔案和範圍
中跳轉,也就是說你無法跳出一個函數或類方法,也無法跳入到另一個函數。
常見的用法是用來跳出迴圈或者switch,可以代替多層的break
總結
流程式控制制,在開發中不可避免的,我們寫的代碼總是在流程式控制制中執行,明白了PHP的流程式控制制也就明白了代碼的整體架構。同時for迴圈while迴圈等自己可以進行加深,不管什麼程式設計語言,只有自己不停地敲代碼才會明白其中的道理。所以要多敲代碼,多練習。
以上就是PHP基礎教程四之流程式控制制的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!