// 密碼驗證:長度≥6 且不能全為數字
if (strlen($passwd) < 6 || empty(preg_replace("/\d/", "", $passwd))) {
// do something
}
本地 PHP 5.5 運行完美,部署到 PHP 5.3 服務器直接拋出:
Fatal error: Can't use function return value in write context
Note: Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work:empty(trim($name)). Instead, usetrim($name) == false.
| 特性 | PHP < 5.5 | PHP ≥ 5.5 |
|---|---|---|
| 參數類型 | 僅支持變量 | 支持任意表達式 |
| 函數返回值 | ❌ 致命錯誤 | ✅ 正常工作 |
| 方法調用結果 | ❌ 致命錯誤 | ✅ 正常工作 |
| 常量表達式 | ❌ 致命錯誤 | ✅ 正常工作 |
| 語言構造 | 編譯期檢查 | 運行期求值 |
以下值視為「空」返回 true:
"" (空字符串)0 (整數零)"0" (字符串零)NULLfalsearray() (空數組)$cleanPasswd = preg_replace("/\d/", "", $passwd);
if (strlen($passwd) < 6 || empty($cleanPasswd)) {
// ...
}
$cleanPasswd = preg_replace("/\d/", "", $passwd);
if (strlen($passwd) < 6 || $cleanPasswd === '') {
// ...
}
function is_blank($value): bool {
return empty($value); // PHP 5.5+ 直接支持表達式
}
// 使用
if (strlen($passwd) < 6 || is_blank(preg_replace("/\d/", "", $passwd))) {
// ...
}
empty( 調用,檢查參數是否為非變量表達式0、"0"、false、null、空數組)補全測試用例isset() 同樣受限isset() 在 PHP 5.5 前也只支持變量,同樣需用中間變量或顯式檢查。
empty() 在 PHP 5.5 從「僅檢查變量」進化為「求值任意表達式並判斷空值」,這是破壞性變更。維護舊專案時務必注意版本差異,新專案直接使用 PHP 8.x 享受現代語言特性。