| 函數 | 說明 | 現代替代/備註 |
strlen | 位元組長度 | 多位元組請用 mb_strlen |
mb_strlen | 字元長度(支援編碼) | 預設 UTF-8,建議全專案統一 `mb_internal_encoding('UTF-8')` |
substr / mb_substr | 截取子字串 | PHP 8.0+ 支援負數長度 |
strpos / mb_strpos | 查找首次出現位置 | 嚴格比較 `!== false` |
str_contains | PHP 8.0+ 判斷是否包含 | 替代 `strpos() !== false`,更語義化 |
str_starts_with / str_ends_with | PHP 8.0+ 前綴/後綴判斷 | 替代 `strncmp`/`substr` |
explode | 分割字串為陣列 | 限制分割數用第三參數 |
implode | 陣列合併為字串 | 參數順序可互換,建議固定 `implode($glue, $pieces)` |
trim / ltrim / rtrim | 移除首尾空白 | 第二參數可指定字元表 |
htmlspecialchars | HTML 實體編碼(防 XSS) | **必加** `ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'` |
htmlentities | 所有字元轉實體 | 同樣需指定編碼與旗標 |
sprintf / vsprintf | 格式化字串 | 型別標識:`%s` `%d` `%f` `%x` `%02d` |
json_encode / json_decode | JSON 序列化/反序列化 | 旗標:`JSON_THROW_ON_ERROR`、`JSON_UNESCAPED_UNICODE`、`JSON_UNESCAPED_SLASHES` |
password_hash / password_verify | 密碼雜湊(BCrypt/Argon2) | **唯一**正確密碼處理方式,禁用 `md5`/`sha1` |
| 函數/類別 | 說明 | 備註 |
new DateTime() / DateTimeImmutable | 建立日期時間物件 | 支援相對格式 `'now'` `'+1 day'` `'first day of next month'` |
$dt->format('Y-m-d H:i:s') | 格式化輸出 | 格式字元參考手冊 |
$dt->add() / $dt->sub() | 加減 DateInterval | 可變版本會修改自身,Immutable 返回新實例 |
$dt1->diff($dt2) | 計算差值 | 返回 DateInterval,屬性 `y,m,d,h,i,s,days,invert` |
new DatePeriod($start, $interval, $end) | 生成日期序列 | 迭代器模式,記憶體友善 |
new DateTimeZone('Asia/Taipei') | 時區物件 | 複用實例避免重複建構 |
strtotime | 解析相對時間為時間戳 | **僅用於簡單相對解析**,複雜格式用 DateTime::createFromFormat |
time | 當前 Unix 時間戳 | 精度秒,毫秒用 microtime(true) |
| 函數 | 說明 | 備註 |
file_get_contents / file_put_contents | 讀/寫整個檔案 | `FILE_APPEND`、`LOCK_EX` 旗標,大檔案改用串流 |
fopen / fread / fwrite / fclose | 串流操作 | 模式:`r` `w` `a` `r+` `rb` `wb`,`fseek`/`ftell` 定位 |
glob | 模式匹配檔案列表 | 旗標 `GLOB_BRACE`、`GLOB_NOSORT` |
scandir | 掃描目錄 | 返回含 `.` `..`,需自行過濾 |
is_file / is_dir / is_readable / is_writable | 類型/權限檢查 | 緩存結果,避免重複 `stat` |
mkdir / rmdir | 建立/刪除目錄 | `mkdir($path, 0755, true)` 遞歸建立 |
unlink | 刪除檔案 | |
rename | 移動/重命名 | 跨裝置可能失效,改用 `copy`+`unlink` |
realpath | 解析絕對路徑 | 解析符號連結、相對路徑 |
SplFileObject | OO 檔案操作 | 可迭代、CSV 解析、鎖定、定位 |
| 類別/方法 | 說明 | 關鍵點 |
new PDO($dsn, $user, $pass, $opts) | 建立連線 | `$opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false]` |
$pdo->prepare($sql) | 預處理語句 | 佔位符 `?` 或 `:name`,**禁止**字串拼接 SQL |
$stmt->execute($params) | 綁定並執行 | 陣列綁定自動型別,或 `bindValue` 指定型別 |
$stmt->fetchAll() / fetch() | 獲取結果 | `FETCH_ASSOC`、`FETCH_CLASS`、`FETCH_FUNC`、`FETCH_COLUMN` |
$pdo->beginTransaction() / commit() / rollBack() | 事務控制 | 巢狀事務需驅動支援(MySQL 8.0+ 支援 Savepoint) |
$pdo->lastInsertId() | 取得自增 ID | 序列名可選參數 |
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) | MySQLi 例外模式 | PHP 8.1+ 預設啟用 |
| 函數 | 說明 | 安全建議 |
session_start() | 啟動/恢復 Session | `['cookie_secure' => true, 'cookie_httponly' => true, 'cookie_samesite' => 'Lax', 'use_strict_mode' => true]` |
session_regenerate_id(true) | 重新生成 ID(防固定) | 登入成功後必須呼叫 |
session_destroy() | 銷毀 Session | 搭配 `$_SESSION = []`、`setcookie(session_name(), '', time()-3600)` |
setcookie($name, $val, $expire, $path, $domain, $secure, $httponly) | 設定 Cookie | PHP 7.3+ 支援選項陣列 `['samesite' => 'Lax']` |