| 特性 | echo | |
|---|---|---|
| 返回值 | 無 | 總是 1 |
| 參數 | 可多參數 echo 'a','b' | 單參數 |
| 速度 | 略快(無返回值開銷) | 稍慢 |
| 表達式上下文 | 不可用 | 可用 $r = print 'x'; |
建議:日常輸出用 echo,需在表達式中輸出時用 print。
| 特性 | include | require |
|---|---|---|
| 文件不存在 | Warning,繼續 | Fatal Error,停止 |
| 條件包含 | 運行時決策,支援 if() include | 編譯時無條件包含,if() require 仍會包含 |
| 返回值 | 包含文件可 return 值 | 同 |
衍生:include_once/require_once 防重複包含(大型項目必用)。
<?php
var_dump(gettype("")); // string
var_dump(gettype(null)); // NULL
var_dump(gettype(0)); // integer
var_dump("" == null); // true (值相等)
var_dump("" === null); // false (類型不同)
var_dump(0 == ""); // true
var_dump(0 === ""); // false
?>
結論:== 比較值,=== 比較值+類型。業務判斷建議統一用 ===,避免隱式轉換陷阱。
| 場景 | isset() | empty() |
|---|---|---|
| 變量未定義 | false | true |
| $var = 0 | true | true ← 易誤判為「未設置」 |
| $var = "0" | true | true |
| $var = false | true | true |
| $var = [] | true | true |
| $var = "abc" | true | false |
檢測「是否已設置且非空」:isset($var) && $var !== '' 或 !empty($var)(但注意 0/"0" 會被視為空)。
<?php "123" == 123 // true "123" === 123 // false (string vs int) true == 1 // true true === 1 // false null == false // true null === false // false [] == false // true [] === false // false ?>
規則:永遠優先使用 ===,除非明確需要類型轉換語義(極少見)。
<?php
// 配置讀取:嚴格判斷是否設置
$debug = getenv('APP_DEBUG');
if ($debug === 'true') { /* ... */ } // 避免 "1"/"0" 歧義
// 數據庫查詢結果判斷
$row = $stmt->fetch();
if ($row === false) { /* 無數據 */ } // fetch 失敗返回 false,而非 null
// 表單提交檢查
if (isset($_POST['action']) && $_POST['action'] === 'submit') { /* ... */ }
// Session 權限驗證
if (isset($_SESSION['user_id']) && $_SESSION['user_id'] > 0) { /* 登錄態 */ }
// 緩存獲取
$cache = $redis->get($key);
if ($cache === false) { /* 未命中 */ } // Redis 可能存儲空字符串,false 才是未命中
?>