目錄
- 一、條件語句:程序的 “抉擇路口”
- 1.1 if 語句家族:基礎與進階
- 1.2 switch 語句:精準匹配的 “導航儀”
- 二、循環語句:程序的 “重復舞步”
- 2.1 for 循環:有序的 “征程”
- 2.2 while 與 do - while 循環:條件驅動的 “旋轉門”
- 2.3 foreach 循環:數組遍歷的 “特快列車”
- 三、跳轉語句:程序流程的 “變奏曲”
- 3.1 break 語句:循環與 switch 的 “急剎車”
- 3.2 continue 語句:循環的 “加速跳過鍵”
- 四、表達式:程序運算的 “基石”
- 4.1 表達式的組成:代碼世界的 “積木”
- 4.2 運算規則:表達式的 “游戲規則”
一、條件語句:程序的 “抉擇路口”
在 PHP 編程的世界里,條件語句就像是程序的 “智慧大腦”,賦予程序根據不同情況做出決策的能力。通過條件語句,我們可以讓程序在不同的條件下執行不同的代碼塊,從而實現各種復雜的業務邏輯。接下來,我們就一同探索 PHP 中條件語句的奧秘。
1.1 if 語句家族:基礎與進階
if 語句是 PHP 中最基本的條件判斷語句,它的基本形式如下:
if (條件表達式) {// 當條件表達式為true時執行的代碼
}
在這個結構中,條件表達式是一個返回布爾值(true 或 false)的表達式。如果條件表達式的結果為 true,那么大括號內的代碼塊將會被執行;如果為 false,代碼塊則會被跳過。例如,我們要判斷一個人的年齡是否達到 18 歲(即是否成年),可以這樣寫:
$age = 20;
if ($age >= 18) {echo "你已成年。";
}
在這個例子中,變量$age的值為 20,$age >= 18這個條件表達式的結果為 true,所以會輸出 “你已成年。”。
if - else 語句是 if 語句的擴展,它提供了兩種執行路徑:當條件表達式為 true 時執行 if 代碼塊;當條件表達式為 false 時執行 else 代碼塊。其語法結構如下:
if (條件表達式) {// 當條件表達式為true時執行的代碼
} else {// 當條件表達式為false時執行的代碼
}
比如,我們要判斷一個學生的考試成績是否及格(假設 60 分為及格線),代碼可以這樣實現:
$score = 75;
if ($score >= 60) {echo "成績及格。";
} else {echo "成績不及格。";
}
這里,變量$score的值為 75,$score >= 60為 true,因此會輸出 “成績及格。”。如果$score的值小于 60,就會執行 else 代碼塊,輸出 “成績不及格。”。
if - elseif - else 語句則用于處理多個條件的情況。程序會按照從上到下的順序依次檢查 if 和各個 elseif 的條件表達式,一旦某個條件表達式為 true,就會執行對應的代碼塊,并跳過后續的條件判斷。如果所有條件表達式都為 false,則執行 else 代碼塊。其語法如下:
if (條件表達式1) {// 當條件表達式1為true時執行的代碼
} elseif (條件表達式2) {// 當條件表達式2為true時執行的代碼
} elseif (條件表達式3) {// 當條件表達式3為true時執行的代碼
} else {// 當所有條件表達式都為false時執行的代碼
}
以學生成績等級評定為例,假設 90 分及以上為 “優秀”,80 - 89 分為 “良好”,70 - 79 分為 “中等”,60 - 69 分為 “及格”,60 分以下為 “不及格”,代碼可以寫成:
$score = 85;
if ($score >= 90) {echo "成績等級為:優秀";
} elseif ($score >= 80) {echo "成績等級為:良好";
} elseif ($score >= 70) {echo "成績等級為:中等";
} elseif ($score >= 60) {echo "成績等級為:及格";
} else {echo "成績等級為:不及格";
}
在這個示例中,$score的值為 85,首先判斷$score >= 90為 false,接著判斷$score >= 80為 true,所以會輸出 “成績等級為:良好”,并跳過后面的 elseif 和 else 代碼塊。
1.2 switch 語句:精準匹配的 “導航儀”
switch 語句也是一種多分支選擇語句,它根據一個表達式的值來選擇執行不同的代碼塊。其語法結構如下:
switch (表達式) {case 值1:// 當表達式的值等于值1時執行的代碼break;case 值2:// 當表達式的值等于值2時執行的代碼break;case 值3:// 當表達式的值等于值3時執行的代碼break;default:// 當表達式的值不等于任何一個case的值時執行的代碼break;
}
在 switch 語句中,表達式會被計算一次,然后與各個 case 后面的值進行比較。如果找到匹配的值,就會執行該 case 下的代碼塊,直到遇到break語句,break語句用于終止 switch 語句的執行,防止繼續執行下一個 case 的代碼。如果沒有找到匹配的值,且存在 default 分支,則會執行 default 下的代碼塊。
例如,我們根據一個數字來判斷是星期幾(假設 1 代表星期一,2 代表星期二,以此類推),代碼如下:
$day = 3;
switch ($day) {case 1:echo "星期一";break;case 2:echo "星期二";break;case 3:echo "星期三";break;case 4:echo "星期四";break;case 5:echo "星期五";break;case 6:echo "星期六";break;case 7:echo "星期日";break;default:echo "無效的輸入";break;
}
這里,$day的值為 3,與 case 3 匹配,所以會輸出 “星期三”,然后遇到break語句,結束 switch 語句的執行。
switch 語句與 if 語句有一定的區別。switch 語句通常適用于對一個固定值進行等值匹配的情況,它的結構更加清晰,執行效率在某些情況下可能更高,因為它直接根據表達式的值跳轉到對應的 case 分支。而 if 語句則更加靈活,不僅可以進行等值判斷,還適合用于范圍判斷(如成績等級評定中的分數范圍判斷)或復雜的條件組合判斷。例如,判斷一個數是否在某個區間內,使用 if 語句會更加方便:
$num = 50;
if ($num >= 30 && $num <= 70) {echo "數字在30到70之間";
}
這種范圍判斷用 switch 語句來實現就會比較繁瑣。所以在實際編程中,我們需要根據具體的需求來選擇使用 if 語句還是 switch 語句,以達到最佳的編程效果。
二、循環語句:程序的 “重復舞步”
循環語句是 PHP 編程中實現代碼重復執行的重要工具,它能夠讓程序在滿足特定條件的情況下,反復執行一段代碼塊,大大提高了編程效率和代碼的簡潔性。在 PHP 中,常見的循環語句有 for 循環、while 循環、do - while 循環和 foreach 循環,它們各自適用于不同的場景,下面我們就來詳細了解一下。
2.1 for 循環:有序的 “征程”
for 循環是一種非常常用的循環結構,特別適用于已知循環次數的情況。它的語法結構如下:
for (初始化表達式; 條件表達式; 遞增/遞減表達式) {// 循環體代碼
}
在這個結構中,初始化表達式在循環開始前執行一次,通常用于初始化循環變量;條件表達式在每次循環開始時進行判斷,如果為 true,則執行循環體代碼,否則結束循環;遞增/遞減表達式在每次循環體代碼執行結束后執行,用于更新循環變量,控制循環的次數。
例如,我們要遍歷一個包含數字 1 到 5 的數組,并輸出每個元素,代碼可以這樣寫:
$numbers = array(1, 2, 3, 4, 5);
for ($i = 0; $i < count($numbers); $i++) {echo $numbers[$i]. " ";
}
在這個例子中,首先定義了一個數組$numbers,然后使用 for 循環進行遍歷。$i = 0是初始化表達式,將循環變量$i初始化為 0;$i < count($numbers)是條件表達式,判斷$i是否小于數組的長度,只要滿足這個條件,就會執行循環體;$i++是遞增表達式,每次循環結束后將$i的值加 1。循環體中的echo $numbers[$i]. " ";用于輸出數組中的每個元素。
for 循環還常用于實現計數功能。比如,我們要計算從 1 到 100 的整數之和,可以這樣實現:
$sum = 0;
for ($i = 1; $i <= 100; $i++) {$sum += $i;
}
echo "1到100的和為:". $sum;
這里,$sum用于存儲累加的結果,初始值為 0。在 for 循環中,從 1 開始,每次循環將$i的值累加到$sum中,直到$i大于 100 時,循環結束,此時$sum中存儲的就是 1 到 100 的和。通過 for 循環,我們可以輕松地完成按指定次數重復執行任務的編程需求,無論是遍歷數組、計算數值,還是生成特定的序列,它都能發揮重要作用。
2.2 while 與 do - while 循環:條件驅動的 “旋轉門”
while 循環是一種條件循環,只要指定的條件為 true,就會不斷執行循環體中的代碼。它的語法形式如下:
while (條件表達式) {// 循環體代碼
}
在 while 循環中,程序首先判斷條件表達式的值,如果為 true,則執行循環體代碼,執行完循環體后再次判斷條件表達式,如此反復,直到條件表達式為 false 時,循環結束。
例如,我們使用 while 循環來計算 1 到 100 的和,代碼如下:
$i = 1;
$sum = 0;
while ($i <= 100) {$sum += $i;$i++;
}
echo "1到100的和為:". $sum;
在這個例子中,先初始化變量$i為 1,$sum為 0。然后在 while 循環中,判斷$i是否小于等于 100,如果是,則將$i累加到$sum中,并將$i加 1。不斷重復這個過程,直到$i大于 100,此時循環結束,輸出 1 到 100 的和。
do - while 循環與 while 循環類似,但有一個重要的區別:do - while 循環會先執行一次循環體,然后再判斷條件表達式。其語法結構如下:
do {// 循環體代碼
} while (條件表達式);
由于先執行循環體,所以無論條件表達式一開始是否為 true,循環體至少會被執行一次。
比如,我們用 do - while 循環來實現一個簡單的菜單輸出程序,讓用戶輸入選項,直到輸入正確的退出選項為止,代碼如下:
do {echo "請選擇操作:\n";echo "1. 查看信息\n";echo "2. 修改信息\n";echo "3. 退出\n";$choice = readline("請輸入你的選擇:");switch ($choice) {case '1':echo "你選擇了查看信息\n";break;case '2':echo "你選擇了修改信息\n";break;case '3':echo "你選擇了退出\n";break;default:echo "無效的選擇,請重新輸入\n";}
} while ($choice!= '3');
在這個程序中,首先會輸出菜單,讓用戶輸入選擇。無論用戶第一次輸入什么,菜單都會至少顯示一次。然后根據用戶的輸入進行相應的操作,并再次判斷用戶輸入是否為 ‘3’,如果不是,則繼續循環,再次顯示菜單讓用戶輸入,直到用戶輸入 ‘3’ 為止。
通過 while 和 do - while 循環的對比可以看出,while 循環適用于在執行循環體之前需要先判斷條件的情況;而 do - while 循環則適用于需要先執行一次循環體,再根據條件決定是否繼續循環的場景 。在實際編程中,我們需要根據具體的需求來選擇合適的循環結構。
2.3 foreach 循環:數組遍歷的 “特快列車”
foreach 循環是 PHP 中專門用于遍歷數組的循環結構,它提供了一種簡潔、高效的方式來訪問數組中的每個元素。其語法有兩種形式,一種用于遍歷普通數組,獲取數組的值:
foreach ($array as $value) {// 循環體代碼,$value為當前數組元素的值
}
另一種用于遍歷關聯數組或同時獲取普通數組的鍵和值:
foreach ($array as $key => $value) {// 循環體代碼,$key為當前數組元素的鍵,$value為當前數組元素的值
}
例如,我們有一個關聯數組,存儲了一個人的信息,包括姓名、年齡和城市,使用 foreach 循環來遍歷并輸出這些信息,代碼如下:
$person = array("name" => "張三", "age" => 25, "city" => "北京");
foreach ($person as $key => $value) {echo $key. ":". $value. "<br>";
}
在這個例子中,$person是一個關聯數組。通過 foreach 循環,$key依次取到數組的鍵(“name”、“age”、“city”),$value依次取到對應鍵的值(“張三”、25、“北京”),然后在循環體中輸出鍵值對信息。
如果是普通數組,我們可以使用第一種語法形式來遍歷。比如有一個存儲了學生成績的數組,要輸出每個學生的成績:
$scores = array(85, 90, 78, 92, 88);
foreach ($scores as $score) {echo "學生成績:". $score. "<br>";
}
這里,$score會依次取到數組$scores中的每個元素值,即每個學生的成績,并輸出。
foreach 循環在遍歷數組時非常方便,不需要像 for 循環那樣手動控制索引,減少了出錯的可能性,同時代碼也更加簡潔易讀。無論是處理簡單的一維數組,還是復雜的多維數組,foreach 循環都能輕松勝任,是 PHP 數組遍歷的首選工具之一 。
三、跳轉語句:程序流程的 “變奏曲”
在 PHP 程序的執行過程中,跳轉語句就像是神奇的 “魔法棒”,能夠改變程序的執行順序,讓代碼的執行更加靈活和高效。跳轉語句主要包括 break 語句和 continue 語句,它們在循環和 switch 語句中發揮著重要的作用,接下來我們就詳細了解一下這兩種跳轉語句。
3.1 break 語句:循環與 switch 的 “急剎車”
break 語句的主要作用是終止當前循環或者 switch 語句的執行,并將程序的控制權轉移到被終止語句之后的下一條語句。在循環中,當滿足特定條件時,使用 break 語句可以立即結束循環,不再執行循環體中剩余的代碼;在 switch 語句中,break 語句用于跳出 switch 結構,避免執行多余的 case 分支。
在 for 循環中查找數組中是否存在特定元素,如果找到則終止循環,示例代碼如下:
$numbers = array(10, 20, 30, 40, 50);
for ($i = 0; $i < count($numbers); $i++) {if ($numbers[$i] == 30) {echo "找到了元素30";break;}
}
在這個例子中,當$numbers[$i]的值等于 30 時,break語句被執行,循環立即終止,不再繼續遍歷數組后面的元素。
在 switch 語句中,當匹配到相應的 case 時,使用 break 語句跳出 switch 結構,示例代碼如下:
$dayOfWeek = 3;
switch ($dayOfWeek) {case 1:echo "星期一";break;case 2:echo "星期二";break;case 3:echo "星期三";break;case 4:echo "星期四";break;case 5:echo "星期五";break;case 6:echo "星期六";break;case 7:echo "星期日";break;default:echo "無效的輸入";break;
}
這里,當$dayOfWeek的值為 3 時,匹配到 case 3,輸出 “星期三”,然后執行break語句,跳出 switch 語句,不再執行后面的其他 case 分支。
3.2 continue 語句:循環的 “加速跳過鍵”
continue 語句的作用是跳過當前循環中剩余的代碼,直接開始下一次循環迭代。它不會終止整個循環,只是跳過本次循環中continue語句后面的部分,然后回到循環的開頭,重新判斷循環條件,決定是否繼續執行下一次循環。
例如,在一個 for 循環中,我們要輸出 1 到 10 之間的奇數,可以使用 continue 語句跳過偶數,示例代碼如下:
for ($i = 1; $i <= 10; $i++) {if ($i % 2 == 0) {continue;}echo $i. " ";
}
在這個循環中,當$i是偶數時,if ($i % 2 == 0)條件成立,執行continue語句,跳過echo $i. " ";這行代碼,直接進入下一次循環,即$i自增后再次判斷循環條件,只有當$i為奇數時,才會輸出$i的值。最終輸出的結果為 “1 3 5 7 9” 。通過continue語句,我們可以在循環中靈活地控制哪些代碼需要執行,哪些需要跳過,使得程序能夠更加精準地滿足我們的業務需求 。
四、表達式:程序運算的 “基石”
4.1 表達式的組成:代碼世界的 “積木”
表達式是 PHP 程序中進行各種運算和操作的基本單元,它就像是代碼世界中的 “積木”,通過不同的組合方式構建出豐富多彩的程序邏輯。簡單來說,表達式由操作數和運算符組成。操作數可以是常量、變量、函數調用的返回值等,它代表了參與運算的數據;運算符則定義了對操作數進行的具體運算操作。
在 PHP 中,常見的運算符包括算術運算符(如 +、-、、/、%)、比較運算符(如 ==、!=、>、<、>=、<=)、邏輯運算符(如 &&、||、!)、賦值運算符(如 =、+=、-=、=、/= 等)以及其他一些特殊運算符。
例如,一個簡單的數學運算表達式$a + $b,其中$a和$b是操作數,這里假設它們是已定義的變量,存儲了具體的數值,+是算術運算符,表示加法運算,該表達式的作用是將$a和$b的值相加。
再比如條件判斷表達式$age >= 18,$age是操作數,代表一個人的年齡,>=是比較運算符,用于比較$age的值是否大于或等于 18,這個表達式會返回一個布爾值(true 或 false),可以用于條件語句中進行邏輯判斷。
4.2 運算規則:表達式的 “游戲規則”
當編寫復雜的表達式時,需要遵循一定的運算規則,這些規則決定了表達式中各個部分的計算順序,就如同游戲規則一樣,確保程序能夠正確地執行運算。表達式的運算規則主要涉及運算符的優先級和結合性。
運算符優先級定義了不同運算符在表達式中的運算先后順序。優先級高的運算符會先進行運算,優先級低的運算符后進行運算。例如,在算術運算中,乘法和除法的優先級高于加法和減法。所以在表達式3 + 4 * 2中,先計算4 * 2,得到 8,然后再計算3 + 8,最終結果為 11。
運算符的結合性則規定了在優先級相同的情況下,運算符的計算方向。結合性分為左結合性和右結合性。左結合性表示從左到右依次計算,例如加法和減法運算符是左結合性,在表達式10 - 5 + 3中,先計算10 - 5得到 5,再計算5 + 3,結果為 8;右結合性表示從右到左依次計算,例如賦值運算符是右結合性,在表達式$a = $b = 10中,先將 10 賦值給$b,然后再將$b的值(也就是 10)賦值給$a。
以下是一個更復雜的數學表達式計算示例,展示運算順序和規則的應用:
$a = 2;
$b = 3;
$c = 4;
$result = ($a + $b) * $c / ($a + $c);
echo $result;
在這個例子中,首先計算括號內的表達式,即$a + $b得到 5,$a + $c得到 6;然后按照先乘除后加減的優先級順序,計算乘法5 * $c得到 20;最后計算除法20 / 6,得到結果約為 3.33(實際結果根據 PHP 的浮點數精度表示)。通過合理運用運算符的優先級和結合性規則,我們能夠準確地控制表達式的計算過程,實現各種復雜的數學運算和邏輯判斷,為 PHP 程序的功能實現提供堅實的基礎。