PHP 5.6+ 推薦使用 ... 語法,更優雅:
<?php
// 現代寫法(PHP 5.6+)
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(1, 2, 3, 4); // 10
// 兼容舊版
function sum_legacy() {
return array_sum(func_get_args());
}
?>
應用場景:日誌封裝、數據庫查詢構建器、通用工具函數。
<?php
// 獲取所有 PHP 文件
$phpFiles = glob('*.php');
// 多模式匹配(需 GLOB_BRACE)
$files = glob('*.{php,js,css}', GLOB_BRACE);
// 遞歸查找(PHP 5.5+ 需配合 RecursiveDirectoryIterator)
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('.')
);
$phpFiles = new RegexIterator($iterator, '/\.php$/i');
技巧:array_map('realpath', glob('...')) 獲取絕對路徑。
<?php
echo "初始: " . memory_get_usage() . " bytes\n"; // ~360KB
// 模擬大數據處理
$data = [];
for ($i = 0; $i < 100000; $i++) {
$data[] = md5($i);
}
echo "峰值: " . memory_get_peak_usage() . " bytes\n"; // ~13MB
// 釋放內存
unset($data);
echo "釋放後: " . memory_get_usage() . " bytes\n"; // ~880KB
實戰用途:長時間運行腳本(隊列消費者、數據遷移)內存洩漏監控、OOM 預警。
<?php
// 計算用戶態/系統態 CPU 時間
function get_cpu_usage() {
$ru = getrusage();
$user = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
$sys = $ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6;
return ['user' => $user, 'sys' => $sys, 'total' => $user + $sys];
}
// 基準測試
$start = get_cpu_usage();
// ... 執行代碼 ...
$end = get_cpu_usage();
echo "用戶態: " . ($end['user'] - $start['user']) . "s\n";
echo "系統態: " . ($end['sys'] - $start['sys']) . "s\n";
關鍵指標:ru_nvcsw(主動上下文切換)、ru_nivcsw(被動切換)、ru_minflt/ru_majflt(頁錯誤)。
<?php
// 安全引用同目錄文件(不受工作目錄影響)
require_once __DIR__ . '/config/database.php';
// 調試輸出行號
function debug($msg) {
echo "[LINE " . __LINE__ . "] $msg\n";
}
debug('開始處理'); // 輸出實際行號
<?php
echo uniqid(); // 5f3a1b2c3d4e5 (微秒級,可排序)
echo uniqid('order_'); // order_5f3a1b2c3d4e5 (帶前綴)
echo uniqid('', true); // 5f3a1b2c3d4e5.12345678 (更多熵)
echo uniqid('token_', true); // token_5f3a1b2c3d4e5.12345678
// 對比:md5 32 字符,uniqid 13/23 字符,更短、可排序、無需加密擴展
| 特性 | serialize() | json_encode() |
|---|---|---|
| 格式 | PHP 專有 | 通用標準 |
| 對象支持 | 完整(含私有屬性) | 僅 public 屬性 |
| 資源類型 | 不支持 | 不支持 |
| 性能 | 較快 | 較慢 |
| 可讀性 | 差 | 好 |
| 跨語言 | ❌ | ✅ |
<?php
$data = ['user' => ['id' => 1, 'name' => '張三'], 'tags' => ['vip', 'active']];
// PHP 內部存儲/緩存 → serialize()
$cache = serialize($data);
$restored = unserialize($cache);
// API 對接/前端傳輸/日誌 → json_encode()
$api = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
<?php
$longText = str_repeat('長文本內容...', 1000);
echo "原始: " . strlen($longText) . " bytes\n";
$compressed = gzcompress($longText, 6); // 壓縮級別 1-9
echo "壓縮: " . strlen($compressed) . " bytes\n"; // 通常 30%-50%
$original = gzuncompress($compressed);
// 驗證
var_dump($original === $longText); // true
// 適用場景:大文本緩存、API 響應壓縮、數據庫 Blob 存儲優化
即使 exit()、致命錯誤、用戶停止瀏覽器,也會執行:
<?php
$start = microtime(true);
register_shutdown_function(function() use ($start) {
$time = microtime(true) - $start;
error_log("腳本執行耗時: {$time}s, 內存: " . memory_get_peak_usage());
// 發送監控指標、釋放鎖、關閉連接池
});
// 業務邏輯
process_big_task();
exit('提前退出'); // shutdown 依然會執行
?>
注意:Shutdown 函數運行在獨立作用域,無法輸出到瀏覽器(已發送 Header),僅能寫日誌、數據庫、文件。
| 特性 | 核心函數/語法 | 典型應用 |
|---|---|---|
| 可變參數 | ...$args / func_get_args() | 通用工具函數、日誌封裝 |
| 文件匹配 | glob(pattern, flags) | 批量處理、自動加載掃描 |
| 內存監控 | memory_get_usage() / _peak_usage() | 長運行腳本 OOM 防護 |
| CPU 分析 | getrusage() | 性能調優、瓶頸定位 |
| 魔術常量 | __DIR__ / __LINE__ / __METHOD__ | 路徑引用、調試、日誌上下文 |
| 唯一 ID | uniqid(prefix, more_entropy) | 訂單號、Token、臨時文件名 |
| 序列化 | serialize / json_encode | 緩存存儲 / API 通信 |
| 字符串壓縮 | gzcompress / gzuncompress | 大文本存儲優化、傳輸減量 |
| 關閉回調 | register_shutdown_function() | 資源清理、執行統計、錯誤上報 |