if (條件表達式) {
// 條件評估為 true 時執行的程式碼區塊
}
條件表達式 會被轉型為布林值:
true:非空字串、非零數字、非空陣列、物件、truefalse:''、0、0.0、'0'、[]、null、false<?php
// 假設表單送出 $_POST['name'] = 'neo'
$name = $_POST['name'] ?? '';
if ($name === 'neo') {
?>
<p>歡迎進入母體,Neo。</p>
<p>或許是武力強迫你才這樣做的...</p>
<?php
}
// 缺點:未處理失敗情況,使用者看不到任何回饋
?>
if ($name === 'neo') {
// 成功訊息
}
if ($name !== 'neo') { // 邏輯重複,維護困難
// 失敗訊息
}
if ($name === 'neo') {
?>
<p>歡迎進入母體,Neo。</p>
<?php
} else {
?>
<p>我想知道你是否聽說過莎士比亞,<?= htmlspecialchars($name) ?>.</p>
<p>對於你,很不幸,我不同意。拒絕進入!</p>
<?php
}
if ($day === 'Thursday') {
if ($time === '12') {
if ($place === 'Italy') {
$lunch = 'pasta';
}
}
}
function decideLunch(string $day, string $time, string $place): ?string {
if ($day !== 'Thursday') return null;
if ($time !== '12') return null;
if ($place !== 'Italy') return null;
return 'pasta';
}
if ($day === 'Thursday' && $time === '12' && $place === 'Italy') {
$lunch = 'pasta';
}
| 運算子 | 名稱 | 範例 | 結果 | 說明 |
|---|---|---|---|---|
== | 相等 | '5' == 5 | true | 型別轉換後比較(鬆散) |
=== | 全等 | '5' === 5 | false | 型別與值皆相同(嚴格)⭐推薦 |
!= / <> | 不相等 | '5' != 5 | false | 鬆散比較 |
!== | 不全等 | '5' !== 5 | true | 嚴格比較 ⭐推薦 |
> | 大於 | 10 > 5 | true | |
< | 小於 | 10 < 5 | false | |
>= | 大於等於 | 10 >= 10 | true | |
<= | 小於等於 | 10 <= 10 | true | |
<=> | 太空船 | 1 <=> 2 | -1 | PHP 7+:-1/0/1 代表小於/等於/大於 |
if ($status = 'active') { // 永遠為 true,且 $status 被改寫
// ...
}
// 正確
if ($status === 'active') { ... }
// 防禦性寫法:常數放左邊(Yoda 條件,現代較不推薦,靠靜態分析即可)
if ('active' === $status) { ... }
'123abc' == 123 // true ⚠️ 字串轉數字截取前導數字
'123abc' === 123 // false ✅
// 實務建議:輸入驗證階段即轉型
$id = (int)($_GET['id'] ?? 0);
if ($id > 0) { ... }
$name = $_GET['name'] ?? ''; // 預設空字串而非 null
if ($name) { ... } // 空字串為 false,行為符合預期
// PHP 8+ 可用 match 簡化多條件
$role = match (true) {
$user->isAdmin() => 'admin',
$user->isEditor() => 'editor',
default => 'guest',
};
===/!== 嚴格比較if ($user->canPublish())0、''、[]、null、false掌握 if 條件判斷的精髓,是寫出健壯、可維護 PHP 程式碼的第一步。下一篇將介紹 switch、match 多重分支與迴圈控制結構。