PHP If...Else
if / elseif / else, ternaries, alternative syntax, and common falsy pitfalls.
Key Points`if` tests truthiness; 0, "", "0", null and [] are all falsy in PHP.
基本结构
PHP
<?php
$score = 85;
if ($score >= 90) {
echo "优秀\n";
} elseif ($score >= 80) {
echo "良好\n";
} elseif ($score >= 60) {
echo "及格\n";
} else {
echo "不及格\n";
}Output
良好Both elseif and else if work. Note that elseif is a single word — else if breaks under the alternative syntax.
真假值
PHP coerces to boolean loosely; all of these are false:
| Value | bool | Note |
|---|---|---|
| false | false | 字面量 |
| 0 | false | 整数零 |
| 0.0 | false | 浮点零 |
| "" | false | 空字符串 |
| "0" | false | the only non-empty falsy string |
| [] | false | 空数组 |
| null | false | 空值 |
| "0.0" / " " | true | 非空且不是 "0" |
The falsiness of
"0" trips up everyone. When checking whether a field was filled, use isset() or !== ''.三元与简写
PHP
<?php
$score = 85;
echo $score >= 60 ? "通过" : "未通过", "\n";
// 嵌套三元必须加括号(PHP 8 起不加会报错)
$grade = $score >= 90 ? "A" : ($score >= 80 ? "B" : "C");
echo $grade, "\n";
// Elvis:左边为假取右边
$nick = "";
echo ($nick ?: "游客"), "\n";
// 空合并:左边为 null / 未定义取右边
echo ($undefined ?? "兜底"), "\n";Output
通过
B
游客
兜底替代语法
When mixing HTML into templates, if: ... endif; reads far cleaner than braces. Laravel Blade and WordPress themes use it.
PHP
<?php $isLogin = true; $user = "Tom"; ?>
<?php if ($isLogin): ?>
<p>欢迎回来,<?= $user ?></p>
<?php else: ?>
<p>请先登录</p>
<?php endif; ?>Output
<p>欢迎回来,Tom</p><?= $x ?> is shorthand for <?php echo $x; ?>, always available since 5.4. Escape user data with htmlspecialchars().
常见写法
- Early return ——
if (!$ok) return;first, avoiding deep nesting - **Never write
if ($x == true)** —— justif ($x) - Constant on the left ——
if (1 === $x)guards against a stray= - **
empty()vsisset()** ——empty()is true for"0"too, use with care
基本结构
PHP
<?php
$score = 85;
if ($score >= 90) {
echo "优秀\n";
} elseif ($score >= 80) {
echo "良好\n";
} elseif ($score >= 60) {
echo "及格\n";
} else {
echo "不及格\n";
}Output
良好elseif 和 else if 都能用,效果一样。注意 elseif 是一个词,写成 else if 在替代语法(: endif)里会报错。
真假值
PHP 不做严格布尔化,下面这些都算 false:
| 值 | 布尔值 | 说明 |
|---|---|---|
| false | false | 字面量 |
| 0 | false | 整数零 |
| 0.0 | false | 浮点零 |
| "" | false | 空字符串 |
| "0" | false | 只有这个非空字符串是假 |
| [] | false | 空数组 |
| null | false | 空值 |
| "0.0" / " " | true | 非空且不是 "0" |
"0" 是假值这件事害过无数人。用户输入 0 时 if ($input) 会走进 else 分支。判断「有没有填」应该用 isset() 或 !== ''。三元与简写
PHP
<?php
$score = 85;
echo $score >= 60 ? "通过" : "未通过", "\n";
// 嵌套三元必须加括号(PHP 8 起不加会报错)
$grade = $score >= 90 ? "A" : ($score >= 80 ? "B" : "C");
echo $grade, "\n";
// Elvis:左边为假取右边
$nick = "";
echo ($nick ?: "游客"), "\n";
// 空合并:左边为 null / 未定义取右边
echo ($undefined ?? "兜底"), "\n";Output
通过
B
游客
兜底替代语法
模板里混着 HTML 时,if: ... endif; 比一堆花括号清爽得多。Laravel Blade、WordPress 主题都在用这套。
PHP
<?php $isLogin = true; $user = "Tom"; ?>
<?php if ($isLogin): ?>
<p>欢迎回来,<?= $user ?></p>
<?php else: ?>
<p>请先登录</p>
<?php endif; ?>Output
<p>欢迎回来,Tom</p><?= $x ?> 是 <?php echo $x; ?> 的简写,PHP 5.4 起始终可用。输出用户数据时记得 htmlspecialchars()。
常见写法
- 早返回 —— 函数里先
if (!$ok) return;,避免层层嵌套 - **别写
if ($x == true)** —— 直接if ($x) - 比较常量放左边 ——
if (1 === $x),防止误写= - **
empty()与isset()** ——empty()对"0"也返回 true,慎用