PHP 是弱型別語言,理解自動型別轉換規則與流程控制結構,是寫出無 Bug 代碼的前提。本文整理型別轉換陷阱、運算子優先級、分支/迴圈/中斷控制,並以「九九乘法表」與「HTML 日曆表」為實戰練習。
| 場景 | 規則 | 範例 |
|---|---|---|
| 整數 → 字串 | 直接連接 | echo $num . "abc"; |
| 字串 → 整數 | 參與數學運算 | $str + 3;(前導數字部分轉換,非數字開頭為 0) |
| 轉布林 | 以下為 false:0, "0", "", false, [], null, 未定義 | (bool)"0" === false |
<?php
(int)$str; (float)$str; (string)$str; (bool)$str; (array)$str; (object)$str;
?>
<?php
define("HOST", "localhost"); // 全域常數
const API_KEY = "secret"; // 類常數/命名空間常數 (PHP 5.3+)
?>
++ -- ~ !+ - * / %、指派 = += -= *= /= %=、比較 > >= < <= == != === !==、邏輯 && || !、位元 & | ^ << >>、字串連接 .、陣列合併 +$x = $cond ? 'yes' : 'no';(PHP 5.3+ 可省略中間:$x = $cond ?: 'no';)if/elseif/else、switch/caseswitch 適合「固定值比對」,內部用鬆散比較 ==。
for、while、do-while、foreachbreak vs continue<?php
// break:跳出整個迴圈
for ($i=1; $i<10; $i++) {
if ($i===3) break;
echo $i; // 1 2
}
// continue:跳過本次,進入下一次判斷
for ($i=1; $i<10; $i++) {
if ($i===3) continue;
echo $i; // 1 2 4 5 6 7 8 9
}
?>
exit / die():終止腳本執行<?php
echo "11111<br>";
die("腳本到此結束");
echo "22222"; // 不會執行
?>
do-while 至少執行一次<?php
$score = 31;
do {
echo "<h1>{$score}</h1>";
} while ($score >= 60); // 仍會輸出一次 31
?>
<?php
for ($i=1; $i<=9; $i++) {
for ($j=1; $j<=$i; $j++) {
echo "{$i}*{$j}=" . ($i*$j) . " ";
}
echo "<br>";
}
?>
<?php
header("Content-Type: text/html; charset=utf-8");
$days = 31;
echo "<table border=1>";
for ($i=1, $week=0; $i<=$days; ) {
$week++;
$rowClass = ($week % 2) ? 'odd' : 'even';
echo "<tr class='$rowClass'>";
for ($j=0; $j<7; $j++, $i++) {
if ($i > $days) {
echo "<td> </td>";
} else {
echo "<td>{$i}</td>";
}
}
echo "</tr>";
}
echo "</table>";
?>
搭配 CSS:
.odd { background:#f9f9f9; } .even { background:#eef; }
掌握型別轉換細節(特別是 == vs ===、字串參與運算、0/"0"/空字串的布林判斷)能避免 80% 的邏輯 Bug。流程控制方面,善用 foreach 替代計數迴圈,用 break/continue 控制迴圈流向,配合 exit/die 做防禦性程式設計,代碼將更健壯易維護。