PHP框架自動加載類文件原理詳解
描述:公司項目PHP用作中間轉(zhuǎn)發(fā)層(接收http請求,用 socket跟c++做通信),由于代碼沒有用到框架,這些東西自然就是之前的人自己寫的。最近需要對這個底層進(jìn)行優(yōu)化,于是便看了下這部分的代碼。
目的:這塊代碼的主要作用是把主目錄下的所有插件類一次性全部加載進(jìn)來。當(dāng)使用尚未被定義的類(class)和接口(interface)時自動去加載。通過注冊自動加載器,腳本引擎在 PHP 出錯失敗前有了最后一個機(jī)會加載所需的類。
實現(xiàn)方法:主要用到PHP函數(shù)__autoload()
詳細(xì):
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); set_include_path($_SERVER['Root_Path'] . '/libs' . PATH_SEPARATOR . $_SERVER['Root_Path'] . '/lib' . PATH_SEPARATOR . get_include_path() ); if (!function_exists('__autoload')) { function __autoload($className) { ///優(yōu)化包含路徑 $path=_getRootPath($className); $revpath=strtr($className, '_', '/'). '.php'; $rootpath=$path.$revpath; file_exists($rootpath)?include($rootpath):@include($revpath); } } /** *得到根路徑* */ function _getRootPath($classname) { $pearpath=$_SERVER["PHP_PEAR_PATH"].'/'; $libpath=$_SERVER['Root_Path'] . '/lib/'; $libspath=$_SERVER['Root_Path'] . '/libs/'; if(strpos($classname,'Zend_')===0) return $pearpath; ///zend 框架路徑 if(strpos($classname,'DB_')===0 || strpos($classname,'Interface_')===0 || strpos($classname,'Others_')===0 || strpos($classname,'Pay_')===0 || strpos($classname,'PHPMailer_')===0 ) return $libspath; return $libpath; }
其中_getRootPath($classname)函數(shù)獲取的是類名文件所在的真實目錄,根據(jù)類名的頭字段判斷類在哪個目錄下;
如果類能在這些目錄下找到,類在使用前就會被加載。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
采用header定義為文件然后readfile下載(隱藏下載地址)
有時候我們?yōu)榱穗[藏真實的下載地址,我們通過采用header定義為文件然后readfile下載,但這樣會加大服務(wù)器的負(fù)擔(dān),一般不建議下載量比較大的文件2014-01-01Windows下利用Gvim寫PHP產(chǎn)生中文亂碼問題解決方法
昨天本來說早點睡覺呢,沒想到一個在寫PHP程序的時候發(fā)現(xiàn)出現(xiàn)的亂碼問題又睡晚了,不過總算解決了。2011-04-04PHP實現(xiàn)的常規(guī)正則驗證helper公共類完整實例
這篇文章主要介紹了PHP實現(xiàn)的常規(guī)正則驗證helper公共類,結(jié)合完整實例形式分析了php針對常規(guī)的電話、手機(jī)、郵箱、賬號等進(jìn)行正則驗證的操作技巧,需要的朋友可以參考下2017-04-04PHP錯誤Cannot use object of type stdClass as array in錯誤的解決辦法
很多人在PHP輸出一個二維數(shù)組的時候出現(xiàn)“Fatal error: Cannot use object of type stdClass as array in……”。這篇文章主要介紹了該錯誤的解決辦法,需要的朋友可以參考下2014-06-06PHP與JavaScript針對Cookie的讀寫、交互操作方法詳解
這篇文章主要介紹了PHP與JavaScript針對Cookie的讀寫、交互操作方法,結(jié)合實例形式分析了php與javascript設(shè)置cookie、php讀取php及js設(shè)置的cookie、js讀取php及js設(shè)置的cookie等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08