首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 函數速查手冊:核心分類、常用簽名與現代替代方案

     編輯:PHP 綜合知識

使用說明

本表整理 PHP 核心擴展中高頻函數,按功能分類,附上現代替代建議(物件導向、PHP 8.1+ 新特性)。不收錄已移除/棄用函數(如 `mysql_*`、`ereg_*`、`split`、`each` 等),請直接遷移至推薦替代方案。

字串處理

函數說明現代替代/備註
strlen位元組長度多位元組請用 mb_strlen
mb_strlen字元長度(支援編碼)預設 UTF-8,建議全專案統一 `mb_internal_encoding('UTF-8')`
substr / mb_substr截取子字串PHP 8.0+ 支援負數長度
strpos / mb_strpos查找首次出現位置嚴格比較 `!== false`
str_containsPHP 8.0+ 判斷是否包含替代 `strpos() !== false`,更語義化
str_starts_with / str_ends_withPHP 8.0+ 前綴/後綴判斷替代 `strncmp`/`substr`
explode分割字串為陣列限制分割數用第三參數
implode陣列合併為字串參數順序可互換,建議固定 `implode($glue, $pieces)`
trim / ltrim / rtrim移除首尾空白第二參數可指定字元表
htmlspecialcharsHTML 實體編碼(防 XSS)**必加** `ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'`
htmlentities所有字元轉實體同樣需指定編碼與旗標
sprintf / vsprintf格式化字串型別標識:`%s` `%d` `%f` `%x` `%02d`
json_encode / json_decodeJSON 序列化/反序列化旗標:`JSON_THROW_ON_ERROR`、`JSON_UNESCAPED_UNICODE`、`JSON_UNESCAPED_SLASHES`
password_hash / password_verify密碼雜湊(BCrypt/Argon2)**唯一**正確密碼處理方式,禁用 `md5`/`sha1`

陣列操作

函數說明現代替代/備註
array_map映射回呼處理每個元素PHP 7.4+ 箭頭函數 `fn($v) => $v * 2`
array_filter過濾元素旗標 `ARRAY_FILTER_USE_KEY`/`ARRAY_FILTER_USE_BOTH`
array_reduce減縮為單一值初始值務必提供
array_merge合併陣列(數字鍵重新索引)保留字串鍵用 `+` 運算子或 `array_replace`
array_keys / array_values取得鍵/值陣列
in_array檢查值存在嚴格模式第三參數 `true`,大陣列改用 `isset($flip[$val])`
array_key_exists / isset檢查鍵存在`isset` 更快但視 `null` 為不存在
array_column提取欄位值(PHP 5.5+)索引鍵可指定第三參數
array_combine建立關聯陣列兩陣列長度必須相等
array_count_values統計值出現次數
array_unique去重保留首次出現鍵,大陣列效能較差
shuffle打亂順序修改原陣列,PHP 7.1+ 使用 Mersenne Twister

日期時間(推薦 DateTime 物件)

函數/類別說明備註
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解析絕對路徑解析符號連結、相對路徑
SplFileObjectOO 檔案操作可迭代、CSV 解析、鎖定、定位

資料庫(PDO / MySQLi)

類別/方法說明關鍵點
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 與 Cookie

函數說明安全建議
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)設定 CookiePHP 7.3+ 支援選項陣列 `['samesite' => 'Lax']`

錯誤與例外處理

函數/類別說明最佳實踐
set_error_handler自訂錯誤處理器轉換為 `ErrorException` 統一拋出
set_exception_handler未捕獲例外處理記錄日誌、回傳友善錯誤頁、不洩露堆疊
register_shutdown_function腳本結束回呼捕獲致命錯誤(OOM、語法錯誤)
Throwable / Exception / Error例外層級`catch (Throwable $e)` 捕獲所有
error_log寫入錯誤日誌配合 Monolog/Logger 結構化日誌

常用擴展:JSON、OpenSSL、Mbstring、Intl、Zip、GD/Imagick

  • JSON:`json_encode`/`decode` 旗標 `JSON_THROW_ON_ERROR`(PHP 7.3+)自動拋出例外。
  • OpenSSL:`openssl_encrypt`/`decrypt`(AES-256-GCM)、`openssl_random_pseudo_bytes`、`password_hash` 內建使用。
  • Mbstring:`mb_strlen`/`substr`/`strpos`/`convert_encoding`/`http_input`/`http_output`/`internal_encoding` 統一 UTF-8。
  • Intl:`NumberFormatter`、`DateTimeFormatter`、`Collator`、`Transliterator`—— 國際化首選,避免手工 `setlocale`。
  • Zip:`ZipArchive` 類別,建立/讀取/解壓縮,支援密碼加密(PHP 7.2+)。
  • GD/Imagick:圖片縮放、裁切、水印、格式轉換,Imagick 功能更全、效能更佳。

PHP 8.1+ 新增實用函數/特性速查

結語

熟練掌握上表核心函數與現代替代方案,能讓日常開發事半功倍。建議:

  1. **查手冊養成肌肉記憶**—— 遇到不確定參數順序/旗標立刻 `php.net/manual`。
  2. **啟用嚴格模式**—— `declare(strict_types=1);` 捕獲型別錯誤。
  3. **靜態分析**—— PHPStan Level 5+、Psalm 掃描未定義函數、參數型別不符。
  4. **版本升級跟進**—— 每年新版釋出後閱讀遷移指南,主動採用新語法(`match`、`enum`、`readonly`、`DNF types`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性說明範例
array_is_list判斷陣列是否為列表(連續數字鍵從 0 開始)`array_is_list(['a','b'])` → `true`
fsync / fdatasync強制緩衝寫入磁碟`fsync($fp)`
memory_reset_peak_usage重設記憶體峰值統計長時間運行腳本分段統計
never return type標記函數永不返回(拋出/exit)`function redirect(): never { header(...); exit; }`
final class constants常數不可被覆寫`final public const VERSION = '1.0';`
readonly properties初始化後不可修改`public readonly string $id;`
first-class callable syntax`$fn = strlen(...);` 取得可呼叫物件`array_map(strlen(...), $arr)`