Zend Framework 1(ZF1)提供兩種主要的自動載入方式:模組級載入器(Zend_Application_Module_Autoloader)與 全域載入器(Zend_Loader_Autoloader)。理解兩者差異與適用場景,能讓專案結構更清晰。
適用於模組化架構,每個模組擁有獨立的 models/、forms/、views/ 等目錄。於模組的 Bootstrap.php 中初始化:
class Blog_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoload()
{
$loader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Blog', // 命名空間前綴
'basePath' => APPLICATION_PATH . '/modules/blog', // 模組根目錄
));
return $loader;
}
}
此載入器會依照 ZF1 資源類型對應規則,自動對應:
Blog_Model_* → modules/blog/models/Blog_Form_* → modules/blog/forms/Blog_Controller_* → modules/blog/controllers/於專案啟動初期(如 public/index.php 或主 Bootstrap.php)註冊全域命名空間:
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Application_'); // 專案共用類別前綴
注意:仍需確保類別所在目錄已包含在 include_path 中,否則會找不到檔案。
| 特性 | 模組級載入器 | 全域載入器 |
|---|---|---|
| 適用範圍 | 單一模組內部資源 | 跨模組共用類別、Library |
| 命名空間 | 模組名稱(如 Blog_) | 自訂前綴(如 Application_) |
| 資源對應 | 內建 Model/Form/Controller 等對應規則 | 無內建對應,需自行管理路徑 |
| 初始化時機 | 模組 Bootstrap 階段 | 應用程式啟動最早期 |
library/Application/,註冊 Application_ 至全域載入器。setFallbackAutoloader(true),會導致效能下降且難以除錯。