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

PHP 開發者必知的 10 個冷門但超實用內建函式

     編輯:PHP 相關知識

前言

PHP 擁有超過 1000 個內建函式,許多強大卻鮮為人知。本文精選 10 個實戰高頻、能解決棘手問題的冷門函式,附真實應用場景與程式碼範例。

1. levenshtein() — 字串相似度(編輯距離)

計算兩字串轉換所需最少單字元編輯次數(插入、刪除、替換)。

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?

2. get_defined_vars() — 取得所有定義中變數(除錯神器)

回傳當前作用域所有變數組成的關聯陣列,包含超全域變數。

$a = 1; $b = 'test';
$vars = get_defined_vars();
echo $vars['a']; // 1
// 除錯時直接 var_dump(get_defined_vars()) 觀察完整狀態

3. ignore_user_abort() — 忽略用戶中斷,背景任務必備

設定腳本在用戶關閉瀏覽器/取消請求時是否繼續執行。

ignore_user_abort(true); // 即使用戶關閉頁面,腳本仍跑完
set_time_limit(0);       // 移除執行時間限制

// 典型場景:發送大量郵件、生成報表、影片轉碼
foreach ($users as $user) {
    sendNewsletter($user->email);
    // 記錄進度到資料庫,支援斷點續傳
}

4. highlight_string() / highlight_file() — 程式碼高亮輸出

將 PHP 程式碼以內建語法高亮色彩輸出 HTML,適合文件、教學、除錯頁面。

// 字串高亮
highlight_string('');

// 檔案高亮
highlight_file(__FILE__); // 顯示當前檔案原始碼

// 取回字串而非直接輸出
$html = highlight_string('', true);

5. php_strip_whitespace() — 移除註解與空白(原始碼壓縮/分析)

讀取檔案並移除註解、空白字元,保留語意結構。

$clean = php_strip_whitespace(__FILE__);
// 可用於:原始碼體積分析、自動化審計、模板預編譯

6. get_browser() — 瀏覽器能力偵測(需 browscap.ini)

依 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

7. memory_get_usage() / memory_get_peak_usage() / getrusage() — 記憶體與 CPU 監控

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 上不可用

8. gzcompress() / gzuncompress() — 字串壓縮解壓(約 50-90% 壓縮率)

適合大型 JSON、HTML、日誌字串儲存至資料庫/快取/傳輸。

$json = json_encode($largeArray);
$compressed = gzcompress($json, 6); // 壓縮等級 0-9
// 儲存 $compressed 到 DB BLOB 欄位或 Redis

// 還原
$original = gzuncompress($compressed);
$data = json_decode($original, true);

9. spl_autoload_register() — 現代自動載入核心(雖非冷門但常被誤解)

註冊多個自動載入器,支援命名空間對應目錄,取代 __autoload。

spl_autoload_register(function ($class) {
    $file = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
    if (file_exists($file)) require $file;
});
// Composer 自動載入器底層即基於此

10. fastcgi_finish_request() — 提前結束 HTTP 回應,繼續背景處理(PHP-FPM 專用)

將回應發送給客戶端並關閉連線,腳本繼續在背景執行。

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_browserUA 解析能力表相容性統計、功能降級
memory_get_usage/peak記憶體監控效能調優、洩漏偵測
gzcompress/uncompress字串壓縮大資料儲存傳輸
spl_autoload_register自動載入現代專案架構基石
fastcgi_finish_request非阻塞回應API 快速回應+背景處理

結語

掌握這 10 個函式,能讓你在除錯、效能、背景處理、字串處理、瀏覽器偵測等常見場景事半功倍。建議收藏備查,下次遇到對應問題時靈感即現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved