一. Goals and Design
1. Class Naming Conventions
要弄明白Zend Framework中的autoloading,首先要明白類名與類檔案的關系。
Zend Framework 是從perl借鑒來的想法,class names和filesystem是一一對應的關系。簡單的說,‘_’被用來作為目錄的分隔符,以便解決檔案的路徑,然後再加上一個‘.php’字尾。例如:"
Foo_Bar_Baz
"和"
Foo/Bar/Baz.php
"檔案相對應。
2.Autoloader Conventions and Design
Zend Framework's自動加載,由
Zend_Loader_Autoloader
提供支援。
二.Basic Autoloader Usage
在簡單的情景下,可能簡單的請求一下這個類,并且執行個體化它。我們使用getInstance()來擷取這個執行個體。例如:
require_once'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
預設情況下,這将允許加載任何類與類的命名空間字首“zend_”或“zendx_”,隻要他們在你的include_path下。如果要使用其他類的命名空間下的類,最好的,最簡單的,方法是調用執行個體方法的registernamespace()。您可以通過一個單一的名稱空間字首,或一個數組來加載它們。
例如:
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Foo_');
$loader->registerNamespace(array('Foo_','Bar_'));
或者,你可以告訴zend_loader_autoloader 作為“回退”的自動加載。這意味着它将嘗試解決任何類的命名空間字首。然而并不建議這樣使用。
$loader->setFallbackAutoloader(true);
三.Resource Autoloading
例如:
path/to/some/resources/
|-- forms/
| `-- Guestbook.php // Foo_Form_Guestbook
|-- models/
| |-- DbTable/
| | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
| |-- Guestbook.php // Foo_Model_Guestbook
| `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
1. 建立一個resource loader。
$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'path/to/some/resources/',
'namespace' => 'Foo',
));
2.
使用
Zend_Loader_Autoloader_Resourse::addResourceType()
函數定義資源類型。
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model')
->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
3. 定義之後我們可以如下使用:
$form = new Foo_Form_Guestbook();
$guestbook = new Foo_Model_Guestbook();<strong>
</strong>