The Yaf_Loader class
(Yaf >=1.0.0)
簡介
Yaf_Loader 類為Yaf提供了自動載入功能的全面解決方案。
在第一次使用的時候,將檢索 Yaf_Application 的實例, Yaf_Loader 實現了單利模式,並使用spl_autoload註冊它自己。 通過 Yaf_Loader::getInstance() 返回它的實例
Yaf_Loader 載入一個類時僅僅嘗試一次,如果失敗了, 後面的操作將取決於yaf.use_spl_auload, 如果這個配置項為On,Yaf_Loader::autoload() 將會返回FALSE, 從而把機會讓給其他的自動載入功能。如果這個配置項為Off(預設), Yaf_Loader::autoload() 將會返回TRUE, 最重要的是將會拋出一個非常有用的警告(對於找出一個類載入失敗非常有用)。
注意:
請保持yaf.use_spl_autoload保持關閉,除非有一些library有自己的autoload機制,並且是無法改寫的。
預設情況下,Yaf_Loader 收集所有library(類定義的指令碼)儲存進在 php.ini(yaf.library)定義的global library directory之中。
如果你想使用 Yaf_Loader 搜索本地類(庫)(定義在application.ini, 預設情況下,它是 application.directory . "/libraray"), 你需要使用 Yaf_Loader::registerLocalNameSpace() 註冊本地類字首。
讓我們來看看一些例子(假設 APPLICATION_PATH 是 application.directory):
示例 #1 Config example
// Assuming the following configure in php.ini: yaf.libraray = "/global_dir" //Assuming the following configure in application.ini application.libraray = APPLICATION_PATH "/library"
示例 #2 註冊本地名稱空間
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function _initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
示例 #3 載入類
class Foo_Bar_Test => // APPLICATION_PATH/library/Foo/Bar/Test.php class GLO_Name => // /global_dir/Glo/Name.php class BarNon_Test // /global_dir/Barnon/Test.php
示例 #4 載入名稱空間類
class \Foo\Bar\Dummy => // APPLICATION_PATH/library/Foo/Bar/Dummy.php class \FooBar\Bar\Dummy => // /global_dir/FooBar/Bar/Dummy.php
你可能會注意到所有資料夾名字的首字母是大寫的,你可以通過在php.ini中設定 yaf.lowcase_path = On 來將它們小寫。
Yaf_Loader 也是設計來載入MVC類,響應的規則如下:
示例 #5 MVC類載入例子
Controller Classes => // APPLICATION_PATH/controllers/ Model Classes => // APPLICATION_PATH/models/ Plugin Classes => // APPLICATION_PATH/plugins/
示例 #6 MVC 類區別
Controller Classes => // ***Controller Model Classes => // ***Model Plugin Classes => // ***Plugin
示例 #7 MVC loading example
class IndexController // APPLICATION_PATH/controllers/Index.php class DataModel => // APPLICATION_PATH/models/Data.php class DummyPlugin => // APPLICATION_PATH/plugins/Dummy.php class A_B_TestModel => // APPLICATION_PATH/models/A/B/Test.php
類摘要
屬性
- _local_ns
- _library
-
預設情況下,它的值是 application.directory . "/library", 你可以通過修改application.ini(application.library)或者呼叫 Yaf_Loader::setLibraryPath() 改變它。
- _global_library
- _instance
目錄
- Yaf_Loader::autoload — The autoload purpose
- Yaf_Loader::clearLocalNamespace — The clearLocalNamespace purpose
- Yaf_Loader::__construct — The __construct purpose
- Yaf_Loader::getInstance — The getInstance purpose
- Yaf_Loader::getLibraryPath — get the library path
- Yaf_Loader::getLocalNamespace — The getLocalNamespace purpose
- Yaf_Loader::getNamespacePath — Retieve path of a registered namespace
- Yaf_Loader::getLocalNamespace — Retrive all register namespaces info
- Yaf_Loader::import — The import purpose
- Yaf_Loader::isLocalName — The isLocalName purpose
- Yaf_Loader::registerLocalNamespace — 註冊本地類字首
- Yaf_Loader::registerNamespace — Register namespace with searching path
- Yaf_Loader::setLibraryPath — 改變library路徑