1
2
3
4
5
6
7
8
9
10
11

流程控制語句

發(fā)布時間:2017-07-20 07:56   發(fā)布人:毛書朋   浏覽次數:7347

PHP的流程控制之分支語句

PHP的流程控制之循環語句

關聯課件:4子項目四 - 流程控制語句(點擊在線預覽)


4.3.5  流程控制語句

       幾乎在所有的編程語言中,程序都(dōu)由3種(zhǒng)基本的結構組成(chéng),即順序結構、分支結構和循環結構。

       程序是由若幹語句組成(chéng)的,如果程序中語句的執行順序是從上到下依次逐句執行的,那麼(me)這(zhè)個程序的結構就是順序結構,在這(zhè)種(zhǒng)結構中沒(méi)有分支和反複,這(zhè)也是最簡單、最常見的流程結構,這(zhè)裡(lǐ)就不再過(guò)多地讨論。

       PHP中提供了4條流程控制語句來實現分支結構和循環結構。

      ①if…else…            條件語句

      ②switch                   分支選擇語句

      ③do…while…       循環語句

      ④for                         循環語句

      此外PHP還(hái)提供了break語句和continue語句,用以跳出分支結構或循環結構,下面(miàn)對(duì)這(zhè)些語句逐一進(jìn)行詳細的介紹。


4.3.5.1  分支控制語句 


一、if…else…語句

       if…else…語句共有3種(zhǒng)基本結構,此外每種(zhǒng)基本結構還(hái)可以嵌套另外兩(liǎng)種(zhǒng)結構,而且還(hái)允許多級嵌套。

      1. 隻有if的語句

      這(zhè)種(zhǒng)結構可以當作單純的判斷,可解釋成(chéng)“若某條件成(chéng)立則去做什麼(me)事(shì)情”,其語法如下:

if(expr){

            statement

}

       其中的expr爲判斷的條件表達式,通常都(dōu)爲比較表達式或邏輯表達式,而statement表示符合條件時執行的語句,若statement所代表的語句隻有一行,可以省略大括号{}。如果expr爲真,則執行statement語句或語句體。


2.if…else…語句

     這(zhè)種(zhǒng)結構可解釋成(chéng)“若某條件成(chéng)立則去做什麼(me)事(shì)情,否則去做另一件事(shì)情”,其語法如下:

if(expr){

            statement1

}else{

            statement2

}

      如果expr爲真,則執行statement1語句或語句體,否則執行statement2語句或語句體。


3. 包含else if的語句

     前面(miàn)的兩(liǎng)種(zhǒng)分支結構隻能(néng)實現二路分支,用包含else if的語句則可以實現多路分支,其語法如下:

if(expr1){

            statement1

}

else if(expr2){

            statement2

}

else if…

else{

statementn

}

      當expr1爲真時,執行statement1語句或語句體,否則轉入expr2的判斷,如果expr2爲真,則執行statement2語句或語句體,依此類推,如果所有的expr表達式都(dōu)不爲真,則執行statementn語句或語句體。

      程序4-18.php爲if…else…語句應用示例.

<!--文件4-18.php:if…else…的應用-->
<HTML>
<HEAD>
    <TITLE>if…else…的應用</TITLE>
</HEAD>
<BODY>
    <?php
        //本程序測試時,請更改測試服務器的系統時間查看效果
        echo "今天是:".date("D")."<br>";
        if (date("D")=="Sat")
            echo "周末了,我們要去狂歡。<br>";
        if (date("D")=="Sat"){
            echo "再次聲明,周末了,我們要去狂歡,好(hǎo)高興!<br>";
        }else{
            echo "今天不是周末,我們要學(xué)習PHP 5,多麼(me)有意義啊!^_^!!!<br>";
        }
        if (date("D")=="Sun"){
            echo "今天是星期天。";
        }
        else if (date("D")=="Mon"){
            echo "今天是星期一。";
        }
        else if (date("D")=="Tue"){
            echo "今天是星期二。";
        }
        else if (date("D")=="Wed"){
            echo "今天是星期三。";
        }
        else if (date("D")=="Thu"){
            echo "今天是星期四。";
        }
        else if (date("D")=="Fri"){
            echo "今天是星期五。";
        }
        else{
            echo "今天是星期六(隻可能(néng)是星期六了^_^)。";
        }
    ?>
</BODY>
</HTML>

程序4-18中的tate()函數是格式化服務器的時間函數,date("D")返回服務器時間的星期時間中的英文的前3個字符。當系統時間不爲星期六時,其運行結果如圖4-14所示.

4-14.jpg

圖4-14  程序4-18.php的運行結果

        在上述3種(zhǒng)基本結構中,如果在statement語句體中還(hái)有if…else…語句,就構成(chéng)if…else…語句的嵌套。

二、switch語句

      嵌套的if…else…語句可以處理多分支流程,但使用起(qǐ)來比較繁瑣而且也不太清晰,爲此PHP中又引進(jìn)了switch語句。其語法如下:

switch (expr) {

            case expr1:

                  statement1;

                  break;

            case expr2:

                  statement2;

                  break;

             ┆

             ┆

            default:

                  statementN;

                  break;

}

      其中的expr爲條件,通常是變量名稱。而case後(hòu)的exprN,通常表示變量的值。冒号後(hòu)則爲符合該條件要執行的語句。一定要注意break的作用爲退出switch結構,千萬不能(néng)省略不寫。具體使用如程序4-19.php所示。

<!--文件4-19.php:switch的應用-->
<HTML>
<HEAD>
    <TITLE>switch的應用</TITLE>
</HEAD>
<BODY>
    <?php
        //本程序測試時,請更改測試服務器的系統時間查看效果
        echo "今天是:".date("D")."<br>";
        switch (date("D")) {
            case "Mon":
            echo "今天星期一";
            break;
            case "Tue":
            echo "今天星期二";
            break;
            case "Wed":
            echo "今天星期三";
            break;
            case "Thu":
            echo "今天星期四";
            break;
            case "Fri":
            echo "今天星期五";
            break;
            default:
            echo "今天放假";
            break;
        }
    ?>
</BODY>
</HTML>

程序4-19.php的運行效果如圖4-15所示。

4-15.jpg

圖4-15  程序4-19.php的運行結果


通過(guò)比較,不難發(fā)現例4-19.php要比例4-18.php簡單一些,最主要的是程序清晰。


4.3.5.2  循環控制語句 


一、do…while…語句

       在PHP中,do…while…循環語句有兩(liǎng)種(zhǒng)結構,一種(zhǒng)隻有while…部分,另一種(zhǒng)是do…while…兩(liǎng)部分都(dōu)有。


1. 隻有while…部分的語句

其語法如下:

while (expr) {

            statement

}


2.do…while…兩(liǎng)部分都(dōu)有的語句

其語法如下:

do {

            statement

} while (expr);

       其中的expr爲判斷的條件,通常爲邏輯表達式或比較表達式。而statement爲符合條件的執行部分程序,若程序隻有一行,可以省略大括号{}。

      兩(liǎng)種(zhǒng)結構的區别在于:前者是先判斷條件再執行語句,後(hòu)者是先執行語句再判斷條件。對(duì)于expr開(kāi)始爲真的情況,兩(liǎng)種(zhǒng)結構是沒(méi)有區别的。如果expr開(kāi)始爲假,則前者不執行任何語句就跳出循環,而後(hòu)者仍要執行一次循環才能(néng)跳出循環。

具體使用如程序4-20.php所示。

<!--文件4-20.php:do…while…的應用-->
<HTML>
<HEAD>
    <TITLE>do…while…的應用</TITLE>
</HEAD>
<BODY>
    <?php
        //本程序測試時,請將(jiāng)兩(liǎng)處$i的初始值改爲爲4後(hòu)再測試一次
        //觀察結果,分析區别
        $i=1;
        while($i<=3){
            print $i  ;
            echo ". 以後(hòu)不敢了<br> ";
        }
        echo "第二次……<br>";
        $i=1;
        do{
            print $i  ;
            echo ". 以後(hòu)不敢了<br> ";
        } while($i<=3)
    ?>
</BODY>
</HTML>

由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在編寫代碼的時候要注意不要漏寫。

其運行效果如圖4-16所示。

4-16.jpg

圖4-16  $i初值爲1時,程序4-20.php的運行結果

4-16.2.jpg

圖4-16  $i初值爲4時,程序4-20.php的運行結果


       當我們把第10行和16行更改爲“$i=4;”後(hòu),其運行效果如圖4-16所示,這(zhè)樣就不難看出兩(liǎng)種(zhǒng)循環結構的區别了。


二、for語句

      for語句僅有單純的一種(zhǒng),沒(méi)有其他變化,但同時也是最複雜、功能(néng)最強大的循環語句任何while循環和do…while…循環都(dōu)可以用for循環代替。For語句的語法如下:

for(expr1;expr2;expr3){

statement

}

     其中expr1爲條件的初始值,expr2爲判斷的條件,通常都(dōu)是用比較表達式或邏輯表達式作爲判斷的條件,expr3爲執行statement後(hòu)要執行的部分,即循環步長(cháng),可以用來改變條件,供下次的循環判斷,如將(jiāng)循環變量加1、減1等。statement爲符合條件後(hòu)執行的語句或語句體,若statement隻有一條語句組成(chéng),則可以省略大括号{}。

程序的主體部分可以用for循環改寫如下:

<?php

for ($i=1;$i<=3;$i  ){

echo $i.". 以後(hòu)不敢了<br>";

}

?>

當然還(hái)可以改寫成(chéng)以下幾種(zhǒng)形式:

<?php

$i=1;

       for (;$i<=10;$i  ){

         echo $i.". 以後(hòu)不敢了<br>";

      }

?>

(由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在編寫代碼的時候要注意不要漏寫。)

<?php

for ($i=1;;$i  ){

               if ($i>10)  break;    //循環标志結束,跳出循環

               echo $i.". 以後(hòu)不敢了<br>";

           }

?>

<?php

for ($i=1;$i<=10;){

               echo $i.". 以後(hòu)不敢了<br>";

               $i    ;

           }

?>

       可以明顯地看出用for語句和用while語句的不同。實際應用上中,若循環有初始值,且循環過(guò)程中都(dōu)要累加(或累減),則使用for循環比用while循環好(hǎo)。

由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在編寫代碼的時候要注意不要漏寫。

4.3.5.3  break和continue語句


       在switch和for語句的例子中都(dōu)用到了break語句,它的作用就是跳出整個switch分支結構或for循環結構,執行其下面(miàn)的語句。而continue經(jīng)常用在for或do…while…循環語句中,表示跳出本次循環,繼續進(jìn)入下一次循環。這(zhè)也是break和continue的主要區别,如程序4-21.php所示。

<!--文件4-21.php:break/continue的應用-->
<HTML>
<HEAD>
    <TITLE>break/continue的應用</TITLE>
</HEAD>
<BODY>
    <?php
        echo"使用break的輸出效果:<br>";
        $i=0;
        while ($i<10) {
            if ($i%2==1) {
                break;
            }
            echo $i;
            $i  ;
        }
        echo "<br>使用contine的輸出效果:<br>";
        for($i=0;$i<10;$i  ){
            if ($i%2){
                continue;
            }
            echo $i."&nbsp;";
        }
    ?>
</BODY>
</HTML>

程序4-21.php運行結果如圖4-18所示。

4-18.jpg

圖4-18  程序4-21.php的運行結果



  • 趙博文 2018-01-07 16:00:48
    PHP 提供了一些流程控制的替代語法,包括 if,while,for,foreach 和 switch。替代語法的基本形式是把左花括号({)換成(chéng)冒号(:),把右花括号(})分别換成(chéng) endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
  • 趙博文 2018-01-07 16:01:31
    switch 和第一個 case 之間的任何輸出(含空格)將(jiāng)導緻語法錯誤。例如,這(zhè)樣是無效的: <?php switch ($foo): ?> <?php case 1: ?> ... <?php endswitch ?>
  • 嶽猛 2018-01-09 16:21:42
    看了視頻才知道(dào) PHP還(hái)提供了break語句和continue語句,用以跳出分支結構或循環結構 非常的實用
  • 甄丹丹 2018-01-09 16:23:49
    在switch和for語句的例子中都(dōu)用到了break語句,它的作用就是跳出整個switch分支結構或for循環結構,執行其下面(miàn)的語句。而continue經(jīng)常用在for或do…while…循環語句中,表示跳出本次循環,繼續進(jìn)入下一次循環。這(zhè)也是break和continue的主要區别
  • 魏德旺 2018-01-09 16:25:26
    邏輯性好(hǎo)強,