国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Zend的AutoLoad機制介紹

Zend的AutoLoad機制介紹

2020-01-12 17:58PHP教程網 PHP教程

在使用zend framework的時候,最先引入的一定是AutoLoad的機制,這里就想分析下Zend的AutoLoad是怎么引入的

代碼示例 

復制代碼代碼如下:


set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path()); 
require_once 'Zend/Loader/Autoloader.php'; 
$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->registerNamespace("Zend_"); 
$autoloader->registerNamespace("USVN_"); 
$autoloader->registerNamespace("menus_"); 
$config = new USVN_Config_Ini(USVN_CONFIG_FILE, USVN_CONFIG_SECTION); 



過程分析 

首先是設置了include_path,include_path就是php中調用include的時候文件尋找的地址 
下面就是 require_once 'Zend/Loader/Autoloader.php'; 

在Zend/Loader/Autoloader.php文件內,讀入了Zend/Loader.php, 這個php定義了Zend_Loader這個類,這個類包含了loadClass,loadFile, isReadable(文件是否可讀)等函數 
實例化Zend_Loader_Autoloader的過程就是調用其構造函數(這里是使用了單例模式)的過程 

它的構造函數中的spl_autoload_register(array(__CLASS__, 'autoload'));將Zend_Loader_Autoloader:autoload作為類自動加載函數。 
還做了一個操作將_internalAutoloader賦值了自身的_autoload 

至于這里面是怎么autoload的等會根據具體例子查看 
接下來調用了Zend_Loader_Autoloader:registerNamespace("USVN_"),這個函數做的事就只是在Zend_Loader_AutoLoader的內部屬性_namespaces上掛載一個key為USVN_和value為true的值。 

看到這個函數就明白其實代碼也可以寫成 

$autoloader->registerNamespace("Zend_")->registerNamespace("USVN_") 
或者 
$autoloader->registerNamespace(array("Zend_","USVN_")) 

好了,現在到調用 USVN_Config_Ini類了 
這個類自然走的就是Zend_Loader_Autoloader:autoload("USVN_Config_Ini") 
這個函數第一步會去調用getClassAutoloaders獲取這個類的AutoLoader。getClassAutoloaders里面增加了對namespaceAutoloader的選擇和判斷,由于我們很少使用,直接跳過 

這里返回的loader打印出來是這樣的 

復制代碼代碼如下:


Array ( [0] => Zend_Loader_Autoloader Object ( [_autoloaders:protected] => Array ( ) [_defaultAutoloader:protected] => Array ( [0] => Zend_Loader [1] => loadClass ) [_fallbackAutoloader:protected] => [_internalAutoloader:protected] => Array *RECURSION* [_namespaces:protected] => Array ( [Zend_] => 1 [ZendX_] => 1 [USVN_] => 1 [menus_] => 1 ) [_namespaceAutoloaders:protected] => Array ( ) [_suppressNotFoundWarnings:protected] => [_zfPath:protected] => ) [1] => _autoload ) 



其實就是前面設置的_internalAutoloader。 

這里就會實際調用Zend_Loader_Autoloader:_autoload ("USVN_Config_Ini") 
好了,現在就看到了Zend_Loader_Autoloader:_autoload函數 

$callback = $this->getDefaultAutoloader(); 
這里會獲取默認的Autoloader,什么是默認的Autoloader? 看這個類初始定義,實際上是array('Zend_Loader', 'loadClass'); 
下面自然就調用的是call_user_func($callback, $class);即Zend_Loader:loadClass("USVN_Config_Ini") 

首先Zend_Loader已經在AutoLoader.php中被require了 
其次我們看看Zend_Loader:loadClass方法,這個方法第一步是檢查異常,跳過。第二步是將類分隔,拼湊成$file, 比如USVN/Config/Ini.php,下面就直接調用self::loadFile($file, null, true); 

接下來查看self::loadFile, 
首先_securityCheck看類名中是否有非法字符,沒有,就include了這個$file。這里的$file當然是相對路徑,需要拼接上include_path, 記得include_path是在哪里設置的嗎?在程序的一開始就設置了!好了,這里就把USVN_Config_Ini這個類讀取進來了。 
看到這里你就該明白了,如果你自己定義了一個類,并且注冊了Namespace,比如USVN,那么你就應該在include_path下面創建一個同名文件夾(大小寫必須區分),然后你要引入的相對的文件路徑名就是以類名的_做分隔讀入的。 

到這里AutoLoad機制就閱讀完了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产在线精品视频 | 中文字幕综合在线 | 国产精品综合一区二区 | www.久| 日韩在线免费 | 在线观看国产一区二区 | 一区二区在线 | 黄色一级毛片儿 | 久久综合九色综合欧美狠狠 | 欧美日韩一区二区中文字幕 | 男女免费观看在线爽爽爽视频 | 久久综合一区 | 亚洲一区久久 | 欧美亚洲视频 | 亚洲午夜免费视频 | 日韩有码在线播放 | 青青草原亚洲 | 中文字幕在线免费看 | 精品成人 | 亚洲精选一区 | 91大片在线观看 | 国产亚洲精品美女久久久久久久久久 | 国产精品美女久久久久久免费 | 欧美精品亚洲精品日韩精品 | 伊人一区二区三区 | 欧美日日 | 亚洲精品成人在线 | 欧美日韩在线一区二区 | 精品视频国产 | 国产乱码精品一区二区三区中文 | 中文字幕在线资源 | 国产福利视频在线 | 黄色片免费 | 欧美一区二区三区免费视频 | 成人国产精品久久 | 婷婷综合 | 国产精品成人国产乱一区 | 综合色成人 | 日本一区二区三区视频免费看 | 国产精品一区二区不卡 | 一区二区三区国产 |