天天看點

Zend Framework 中的autoloading使用

一. 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>