PHP 擁有超過 1000 個內建函式,許多強大卻鮮為人知。本文精選 10 個實戰高頻、能解決棘手問題的冷門函式,附真實應用場景與程式碼範例。
計算兩字串轉換所需最少單字元編輯次數(插入、刪除、替換)。
echo levenshtein('carrot', 'carrrott'); // 2
echo levenshtein('hello', 'hallo'); // 1
// 實戰:關鍵字拼錯修正建議
$keywords = ['apple', 'banana', 'orange', 'grape'];
$input = 'aple';
$best = null; $minDist = PHP_INT_MAX;
foreach ($keywords as $kw) {
$d = levenshtein($input, $kw);
if ($d < $minDist) { $minDist = $d; $best = $kw; }
}
echo "Did you mean: $best?"; // Did you mean: apple?
回傳當前作用域所有變數組成的關聯陣列,包含超全域變數。
$a = 1; $b = 'test';
$vars = get_defined_vars();
echo $vars['a']; // 1
// 除錯時直接 var_dump(get_defined_vars()) 觀察完整狀態
設定腳本在用戶關閉瀏覽器/取消請求時是否繼續執行。
ignore_user_abort(true); // 即使用戶關閉頁面,腳本仍跑完
set_time_limit(0); // 移除執行時間限制
// 典型場景:發送大量郵件、生成報表、影片轉碼
foreach ($users as $user) {
sendNewsletter($user->email);
// 記錄進度到資料庫,支援斷點續傳
}
將 PHP 程式碼以內建語法高亮色彩輸出 HTML,適合文件、教學、除錯頁面。
// 字串高亮
highlight_string('');
// 檔案高亮
highlight_file(__FILE__); // 顯示當前檔案原始碼
// 取回字串而非直接輸出
$html = highlight_string('', true);
讀取檔案並移除註解、空白字元,保留語意結構。
$clean = php_strip_whitespace(__FILE__);
// 可用於:原始碼體積分析、自動化審計、模板預編譯
依 User-Agent 解析瀏覽器名稱、版本、平台、支援特性(CSS、JS、Cookies 等)。
// php.ini 需設定:browscap = /path/to/browscap.ini
$browser = get_browser(null, true); // 回傳陣列
echo $browser['browser']; // Chrome
echo $browser['version']; // 120.0.0
echo $browser['platform']; // Win10
echo $browser['cssversion']; // 3
echo "Current: " . memory_get_usage(true) . " bytes\n";
echo "Peak: " . memory_get_peak_usage(true) . " bytes\n";
$ru = getrusage();
echo "User CPU time: " . ($ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6) . " s\n";
echo "System CPU time: " . ($ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6) . " s\n";
// 注意:getrusage() 在 Windows 上不可用
適合大型 JSON、HTML、日誌字串儲存至資料庫/快取/傳輸。
$json = json_encode($largeArray);
$compressed = gzcompress($json, 6); // 壓縮等級 0-9
// 儲存 $compressed 到 DB BLOB 欄位或 Redis
// 還原
$original = gzuncompress($compressed);
$data = json_decode($original, true);
註冊多個自動載入器,支援命名空間對應目錄,取代 __autoload。
spl_autoload_register(function ($class) {
$file = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) require $file;
});
// Composer 自動載入器底層即基於此
將回應發送給客戶端並關閉連線,腳本繼續在背景執行。
echo json_encode(['status' => 'accepted']);
fastcgi_finish_request(); // 客戶端立即收到回應
// 以下耗時操作不阻塞用戶
sendEmail($user->email);
logAnalytics($requestData);
processVideo($uploadId);
| 函式 | 核心用途 | 實戰場景 |
|---|---|---|
| levenshtein | 字串相似度 | 搜尋建議、拼錯修正、去重比對 |
| get_defined_vars | 除錯狀態快照 | 錯誤日誌、變數檢查 |
| ignore_user_abort | 背景任務不中斷 | 大量郵件、報表、轉碼 |
| highlight_string/file | 程式碼高亮 | 文件、教學、除錯頁 |
| php_strip_whitespace | 移除註解空白 | 原始碼分析、壓縮 |
| get_browser | UA 解析能力表 | 相容性統計、功能降級 |
| memory_get_usage/peak | 記憶體監控 | 效能調優、洩漏偵測 |
| gzcompress/uncompress | 字串壓縮 | 大資料儲存傳輸 |
| spl_autoload_register | 自動載入 | 現代專案架構基石 |
| fastcgi_finish_request | 非阻塞回應 | API 快速回應+背景處理 |
掌握這 10 個函式,能讓你在除錯、效能、背景處理、字串處理、瀏覽器偵測等常見場景事半功倍。建議收藏備查,下次遇到對應問題時靈感即現。