函式行為對照表
| 輸入值 | isset() | empty() | is_numeric() |
| 未定義變數 | false | true | 錯誤/false |
| null | false | true | false |
| '' (空字串) | true | true | false |
| 0 (整數) | true | true | true |
| '0' (字串) | true | true | true |
| false | true | true | false |
| 123 / '123' | true | false | true |
適用場景
- isset():檢查變數是否存在且非 null(如檢查 $_GET['id'] 是否在 URL 中)
- empty():檢查「無效值」(未定義、null、空字串、0、false),表單必填驗證首選
- is_numeric():純數值格式檢查,**需先確認變數存在**,否則觸發警告
綜合驗證範例
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$fo = $_GET['fo'] ?? null;
echo '<h2>isset 檢查</h2>';
var_dump(isset($fo));
echo '<h2>empty 檢查</h2>';
var_dump(empty($fo));
echo '<h2>is_numeric 檢查</h2>';
if (isset($fo)) { // 先確認存在
var_dump(is_numeric($fo));
} else {
echo '變數不存在,無法檢查 is_numeric';
}
?>
<a href="?fo=Jack">有效值</a>
<a href="?fo=">空值</a>
<a href="?fo=0">零值</a>
<a href="?">無參數</a>
最佳實踐建議
- 第一層用
empty() 判斷使用者是否有輸入內容
- 第二層用
is_numeric()、filter_var()、正則等做格式驗證
- 避免直接對
$_GET['key'] 用 is_numeric() 或 $_GET['key'] == '',若 key 不存在會噴 Notice
- PHP 7+ 推薦
$_GET['key'] ?? '' 取得預設空字串再驗證