自動加載的原理是Zend_Application實例了Zend_Loader_Autoloader,使其調用了spl_autoload_register(array(__CLASS__, 'autoload')); 這樣如果找不到的類就會調用此對象的autoload方法進行處理。
一個名稱空間可以有多個加載器,迭代找出符合的自定義加載器後,其余的就不會使用了,一般我們只會針對一個名稱空間注冊一個自定義加載器或者直接使用默認的加載器。
注冊名稱空間方式分為兩種:
當一個類沒有找到並要求載入時,其類名交給Zend_Loader_Autoloader::autoload()處理,會經歷以下幾個過程:
自定義的加載器有以下幾種形式:
$autoloader = Zend_Loader_Autoloader::getInstance(); $myAutoloaderClass = new my_Autoloader(); $autoloader->pushAutoloader($myAutoloaderClass, myNamespace);
$autoloader = Zend_Loader_Autoloader::getInstance(); function myAutoloaderFun(){ //TODO }; $autoloader->pushAutoloader('myAutoloaderFun', myNamespace);
$autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('類名', '方法'), myNamespace);
Zend加載器對象方法是Zend_Loader_Autoloader::_autoload。此方法會用call_user_func調用最終的加載方法如默認為array('Zend_Loader', 'loadClass')對當前對象進行加載。