1. echo vs print
| 特性 | echo | print |
| 回傳值 | 無 | 永遠回傳 1 |
| 多參數 | 支援 echo 'a', 'b', 'c'; (無逗號語法錯誤) | 單一參數 |
| 效能 | 極微幅較快 (無回傳值開銷) | 略慢 |
| 用法建議 | **慣用輸出** | 需用於運算式中時 (罕見) |
2. include vs require
| 特性 | include | require |
| 失敗行為 | **警告 (E_WARNING)**,腳本**繼續執行** | **致命錯誤 (E_COMPILE_ERROR)**,腳本**停止** |
| 條件載入 | 支援 (如 if ($cond) include 'a.php';) | **無條件載入**,編譯階段即解析 |
| 用法建議 | 選擇性載入、模板片段 | **核心檔案、設定檔、自動載入器** |
3. include_once / require_once
- 同一請求中**同一檔案只載入一次**
- 防止函數/類別重複定義錯誤
- **現代專案用 Composer PSR-4 自動載入,極少手寫 include/require**
4. 空字串 ''、null、0、false 比較表
| 值 | gettype() | empty() | isset() | bool 轉換 | == null | === null |
'' | string | true | true (若變數存在) | false | true | false |
null | NULL | true | false | false | true | true |
0 | integer | true | true | false | true | false |
'0' | string | true | true | false | true | false |
false | boolean | true | true | false | true | false |
[] | array | true | true | false | true | false |
核心觀念:empty() 視「假值」為空;isset() 只檢查「變數存在且非 null」;== 類型轉換比較,**永遠優先用 === 嚴格比較**。
5. isset() vs empty() 實務陷阱
6. == (等值) vs === (恆等/全等)
7. self:: vs $this-> (類別內部存取)
| 存取目標 | 語法 | 條件 |
常數 const | self::CONST | 靜態、不需實例 |
靜態屬性/方法 static | self::$prop / self::method() | 屬於類別,非實例 |
| 實例屬性/方法 | $this->prop / $this->method() | 需實例化物件 |
name = $n; }
public function greet() { echo "Hi, {$this->name}"; }
}
Demo::getVersion(); // 靜態呼叫
$obj = new Demo();
$obj->setName('A');
$obj->greet();
?>
8. strstr/stristr vs strpos/stripos
| 函數 | 大小寫 | 回傳值 | 效能 |
strstr | 敏感 | 找到後的**子字串** (含針) | 較慢 (需複製字串) |
stristr | 不敏感 | 子字串 | 較慢 |
strpos | 敏感 | **位置索引 (int)** 或 false | **最快** (僅回傳索引) |
stripos | 不敏感 | 位置索引 | 快 |
9. $_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME']
| 情境 | HTTP_HOST | SERVER_NAME |
| 正常 (Port 80, Host 標頭正確, Apache ServerName 正確) | example.com | example.com |
| 非標準 Port (8080) | example.com:8080 | example.com |
| ServerName = example.com, 訪問 www.example.com (ServerAlias) | www.example.com | example.com |
| HTTP/1.0 無 Host 標頭 | 可能空/不準 | ServerName 值 |
結論:**優先用 HTTP_HOST** (反映客戶端實際請求);Port 映射/內網穿透用 HTTP_X_FORWARDED_HOST。SERVER_NAME 受伺服器設定影響,不可靠。
10. 總結:避坑速查表
- 輸出用
echo,多參數用逗號
- 核心檔案用
require_once (或自動載入)
- 判斷變數「有值」用
isset() + !== '',勿用 empty()
- 比較**永遠用
===**
- 靜態成員用
self::,實例成員用 $this->
- 搜尋子字串用
strpos/stripos (檢查 !== false)
- 取網域用
$_SERVER['HTTP_HOST']
null、0、''、false、[] 皆為「假值」,empty() 全真
- 字串
'0' 是假值,**資料庫 ID 為 '0' 字串時特別注意**