// 固定默認參數
function foo($a = '', $b = '') { ... }
// 不定參數 (PHP 5.6+ 推薦 ...$args)
function foo(...$args) {
foreach ($args as $k => $v) echo "arg".($k+1).": $v\n";
}
foo('hello', 'world', 'again');
舊版用 `func_get_args()`、`func_num_args()`、`func_get_arg($i)`。
$phpFiles = glob('*.php');
$multi = glob('*.{php,txt}', GLOB_BRACE);
$withPath = glob('../images/a*.jpg');
$absolute = array_map('realpath', glob('../images/a*.jpg'));
比 `scandir()` + 過濾更簡潔高效。
echo "Initial: " . memory_get_usage() . " bytes\n";
// 361400 bytes
$arr = [];
for ($i = 0; $i < 100000; $i++) $arr[] = md5($i);
for ($i = 0; $i < 50000; $i++) unset($arr[$i]);
echo "Final: " . memory_get_usage() . " bytes\n";
// 885912 bytes
echo "Peak: " . memory_get_peak_usage() . " bytes\n";
// 13687072 bytes
排查內存洩漏、優化大數據處理必備。
$data = getrusage();
$userTime = $data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1e6;
$sysTime = $data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 1e6;
echo "User: $userTime, Sys: $sysTime";
關鍵指標:`ru_utime` 用戶態、`ru_stime` 內核態、`ru_nvcsw` 主動上下文切換、`ru_nivcsw` 被動切換。
| 常量 | 含義 | 示例 |
|---|---|---|
| __LINE__ | 當前行號 | 42 |
| __FILE__ | 完整文件路徑 | /var/www/index.php |
| __DIR__ | 文件目錄 (PHP 5.3+) | /var/www |
| __FUNCTION__ | 函數名 | myFunc |
| __CLASS__ | 類名 | MyClass |
| __METHOD__ | 類方法名 | MyClass::myMethod |
| __NAMESPACE__ | 命名空間 | App\Controllers |
應用:`require_once __DIR__ . '/config.php'` 解決相對路徑問題;日誌記錄 `__LINE__` 定位。
echo uniqid(); // 5f3a2b1c4d5e6 (微秒時間戳基礎)
echo uniqid('prefix_'); // prefix_5f3a2b1c4d5e6
echo uniqid('', true); // 5f3a2b1c4d5e6.12345678 (更多熵)
echo uniqid('id_', true); // id_5f3a2b1c4d5e6.12345678
優於 `md5(uniqid())`:有序、較短、天然可排序,適合分佈式 ID 前綴。
$data = ['hello', 42, [1, 'two'], 'apple'];
// PHP 原生
$ser = serialize($data);
// a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
$orig = unserialize($ser);
// JSON (跨語言、可讀)
$json = json_encode($data); // ["hello",42,[1,"two"],"apple"]
$orig = json_decode($json, true); // 關聯數組
場景:Session 存儲、緩存、隊列消息、API 傳輸。
$str = "Lorem ipsum... (800 字節)";
$compressed = gzcompress($str); // 418 字節 (~48%)
$original = gzuncompress($compressed);
// 替代:gzencode/gzdecode (gzip 格式,含頭尾)
適用:大文本緩存、網絡傳輸壓縮、日誌存儲。壓縮率視內容重複度而定。
| 功能 | 核心函數/特性 | 典型場景 |
|---|---|---|
| 可變參數 | ...$args / func_get_args() | 靈活 API、裝飾器、日誌 |
| 文件搜尋 | glob() | 批量處理、遷移腳本 |
| 內存監控 | memory_get_usage/peak | 洩漏排查、大數據優化 |
| CPU 分析 | getrusage() | 性能分析、瓶頸定位 |
| 魔術常量 | __DIR__, __LINE__... | 路徑解析、調試定位 |
| 唯一 ID | uniqid() | 訂單號、Token、臨時文件 |
| 序列化 | serialize/json_encode | 緩存、Session、消息隊列 |
| 字符串壓縮 | gzcompress/gzuncompress | 大文本存儲、傳輸優化 |
這 8 大功能是 PHP 進階開發者的「瑞士軍刀」,熟練掌握能大幅提升代碼質量與排障效率。