ZendFramework自動載入類的實現方法
Zend Framework中實現自動載入類。網上查了很多,有好幾種。本文收集了常用的3種,
第一種如下:
方法很簡單,舉例說明。比如想要在models目錄下的類可以自動載入。
先在index.php中修改include path。
1
2
3
4
5
|
// Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array (
realpath (APPLICATION_PATH . `/../library` ),
get_include_path(), realpath (APPLICATION_PATH . `/models` )
))); |
上述程式碼裡,新增包含了models的目錄。
然後在Bootstrap.php檔案下,實現一個資源方法。
1
2
3
4
5
|
protected function _initAutoload()
{ $autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader ->setFallbackAutoloader(true);
} |
然後在models裡可以加一個類。注意檔名和類名的關係(類名要加上路徑名,用_隔開。下有示例),不然自動載入會失敗。比如加一個Nav.php的檔案。內容如下:
1
2
3
4
5
6
7
|
<?php class Nav {
public static function getNav() {
echo "pfpf" ;
} } ?> |
在某個controller中,直接使用Nav類。
Nav::getNav();
如果models中需要加資料夾,那麼相應的類名也要有更改。舉例:
在models下有新建一個newFolder資料夾,在該資料夾下面新建一個檔案MKA,那麼這個檔案中的類名就應該是newFolder_MKA這種約定。
1
2
3
4
5
6
7
|
<?php class newFolder_MKA {
public static function getNav() {
echo "<br>MKA" ;
} } ?> |
預設的,index.php中已經包含了 realpath(APPLICATION_PATH . `/../library`)這個路徑,即可以直接把類放到這個資料夾中,既可以實現自動載入。
————————————————————————————————————————————————
還有一種方法,和上述方法類似,只不過在資源方法中實現註冊名稱空間(這裡名稱空間的概念和C#中名稱空間概念不太一樣,這裡指的是類名前面的字首和包含類的資料夾)。假設要自動載入的類在library中,預設的index.php中的includepath已經包含了。
那麼這些類名也要按約定加上名稱空間字首,在My目錄下的加上My_,沒有目錄的就加_。這樣的話,資源方法中只需註冊一下名稱空間就行了。
1
2
3
4
5
6
|
protected function _initAutoload ()
{ Zend_Loader_Autoloader::getInstance()
->registerNamespace( `My_` )
->registerNamespace( `_` );
} |
然後就可以直接呼叫My_Book類和_Pen類了。
My_Book::show();
_Pen::show();
甚至,你也不需要在資源方法中加程式碼,只需在配置檔案application.ini中加入如下指令即可:
1
2
|
autoloaderNamespaces[] = "My_"
autoloaderNamespaces[] = "_"
|
————————————————————————————————————————————————
還有一種方法 ,採用Zend_Loader_Autoloader_Resource類。
看例子,在Bootstrap.php檔案下,寫一個資源方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
protected function _initAutoload()
{ $loader = new Zend_Loader_Autoloader_Resource( array (
`basePath` => APPLICATION_PATH , //這裡指定任何路徑,指定路徑後就在這個路徑下找
`namespace` => `Foo` , //這裡的名稱空間值的是類的字首,比如這個就是類的字首是Foo_開頭的。
));
$loader ->addResourceType( `wwww` , `models` , `Modelxxx` ); //這個方法三個引數,分別是資源型別(貌似可以隨便填),路徑,子名稱空間
//下面是原始碼中對於這3個引數的說明
/**
* Add resource type
*
* @param string $type identifier for the resource type being loaded
* @param string $path path relative to resource base path containing the resource types
* @param null|string $namespace sub-component namespace to append to base namespace that qualifies this resource type
* @return Zend_Loader_Autoloader_Resource
*/
} |
例如上面的例子,它會在APPLICATION_PATHmodels目錄下,自動載入Foo_Modelxxx_這樣的類。
具體看下面的例子,目錄結構圖如下:
那現在的目標是能夠自動載入沒有folder中的類。
對應的,第一步,指定好自動載入的basepath,即`basePath` => APPLICATION_PATH.`/myfolder`,指定一個名稱空間Myns。
注意名稱空間的首字母大寫,不然報錯。
接著,載入資源型別,指定更細節的路徑和名稱空間。
所有的程式碼如下:
1
2
3
4
5
6
7
8
9
|
protected function _initAutoload()
{ $loader = new Zend_Loader_Autoloader_Resource( array (
`basePath` => APPLICATION_PATH. `/myfolder` ,
`namespace` => `Myns`
));
$loader ->addResourceType( `mytype` , `/` , `Mysubns` )
->addResourceType( `mytype2` , `mysubfolder` , `Mysubns2` );
} |
其中注意名稱空間首字母大寫,路徑要指對,然後具體的類名要符合響應的規則。比如例子中的類名的格式就是
名稱空間_子名稱空間_類名的格式。
具體如下:
1
2
3
4
5
6
7
8
|
<?php class Myns_Mysubns2_Myclass2
{ public static function show()
{
echo "myns_mysubns2_myclass2" , "<br>" ;
}
}?> |
1
2
3
4
5
6
7
8
9
|
<?php class Myns_Mysubns_Myclass
{ public static function show()
{
echo "myns_mysubns_myclass" , "<br>" ;
}
} ?> |
然後呼叫的是直接
1
2
|
Myns_Mysubns_Myclass::show(); Myns_Mysubns2_Myclass2::show(); |
就可以了。
本文轉自cnn23711151CTO部落格,原文連結: http://blog.51cto.com/cnn237111/1300913,如需轉載請自行聯絡原作者
相關文章
- php 自動類載入類 composer.json 實現自動載入PHPJSON
- JVM效能最佳化 —— 類載入器,手動實現類的熱載入JVM
- 初學 PHP 類的自動載入PHP
- PHP 類自動載入機制PHP
- 封裝ListView,實現自動載入更多封裝View
- PHP 物件導向 (八)類的自動載入PHP物件
- 拖動滾動條實現內容自動載入效果
- Tomcat 類載入器的實現Tomcat
- 動態載入css方法實現和深入解析CSS
- php基礎,php自動載入的實現程式碼示例PHP
- Android客戶端apk自動檢測更新自動下載自動安裝的實現方法Android客戶端APK
- samba實現自動掛載Samba
- 自動載入
- 實現Web程式的自動登入Web
- 關於jvm載入類的實現順序JVM
- Composer 實現自動載入原理-新手也能看懂
- 【JAVA】自定義類載入器實現類隔離Java
- PHP框架中的檔案載入的實現(自動載入/PSR規範/名稱空間)PHP框架
- PHP 手冊 (類與物件) 學習筆記四:類的自動載入PHP物件筆記
- 滾動載入圖片(懶載入)實現原理
- 實現動態自動匹配輸入的內容
- 實現類似Pinterest 的圖片預載入功能REST
- django 實現滾動載入的功能薦Django
- win10系統怎麼設定自動登入 win10電腦實現自動登入的方法Win10
- 自動載入的iframe高度自適應
- js動態載入實現提高網頁載入速度JS網頁
- 拖動滾動條實現網頁內容自動載入程式碼例項網頁
- Java動態載入類Java
- Python自動登入QQ的實現示例Python
- CRD實現自動化容器安全方法
- Android LRecyclerView 實現下拉重新整理,滑動到底部自動載入更多AndroidView
- ThinkPHP6 的自動載入PHP
- 動態載入JS的方法JS
- Composer 自動載入
- 如何實現 AppStore App 的自動下載APP
- 優雅的實現動態載入 css、jsCSSJS
- Go實現啟動引數載入Go
- TP5.1 原始碼窺探之類的自動載入機制原始碼