自動載入相關函數
| 函數 | 用途 |
spl_autoload_extensions() | 設置 spl_autoload() 掃描的副檔名(預設 .inc/.php) |
spl_autoload_register() | 註冊自定義載入器至 SPL 自動載入棧(推薦替代 __autoload) |
spl_autoload() | 默認實現:按 include_path 查找類文件 |
spl_autoload_call() | 手動觸發所有已註冊載入器嘗試載入指定類 |
spl_autoload_functions() | 獲取所有已註冊載入器列表 |
spl_autoload_unregister() | 註銷載入器 |
自動載入實戰配置
// 設置可載入副檔名
spl_autoload_extensions('.php,.class.php,.inc.php');
// 擴展搜尋路徑
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/libs');
// 註冊默認載入器(掃描 include_path)
spl_autoload_register();
// 或註冊自定義載入器(PSR-4 風格)
spl_autoload_register(function ($class) {
$file = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
if (is_file($file)) require $file;
});
new MyClass(); // 觸發自動載入
類結構檢測函數
| 函數 | 返回值 |
class_implements($class) | 類實現的所有介面名陣列 |
class_parents($class) | 父類鏈陣列(含間接父類) |
class_uses($class) | 類使用的 Trait 列表 |
迭代器工具函數
| 函數 | 用途 |
iterator_to_array($iter) | 迭代器元素轉陣列 |
iterator_count($iter) | 計算元素數量 |
iterator_apply($iter, $fn, $args) | 對每個元素調用回調 |
迭代器函數實戰
$iter = new ArrayIterator(['recipe'=>'pancakes','egg','milk','flour']);
print_r(iterator_to_array($iter)); // 轉陣列
echo iterator_count($iter); // 4
iterator_apply($iter, function(Iterator $it) {
echo strtoupper($it->current()) . "\n";
return true;
}, [$iter]);
其他實用函數
spl_classes():返回所有可用 SPL 類名陣列
spl_object_hash($obj):獲取物件唯一標識(同一生命週期內唯一),可作陣列鍵
最佳實踐提醒
- 自動載入務必使用
spl_autoload_register(),支援多載入器鏈,兼容 Composer PSR-4
spl_object_hash() 在物件銷毀後可能被復用,長期存儲勿依賴
- 迭代器函數適用於記憶體受限場景(大數據流處理),避免一次性載入陣列
- SPL 函數均為 C 實現,效能優於用戶空間等效代碼