PHP框架自動加載類文件原理詳解
描述:公司項(xiàng)目PHP用作中間轉(zhuǎn)發(fā)層(接收http請求,用 socket跟c++做通信),由于代碼沒有用到框架,這些東西自然就是之前的人自己寫的。最近需要對這個底層進(jìn)行優(yōu)化,于是便看了下這部分的代碼。
目的:這塊代碼的主要作用是把主目錄下的所有插件類一次性全部加載進(jìn)來。當(dāng)使用尚未被定義的類(class)和接口(interface)時自動去加載。通過注冊自動加載器,腳本引擎在 PHP 出錯失敗前有了最后一個機(jī)會加載所需的類。
實(shí)現(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ù)獲取的是類名文件所在的真實(shí)目錄,根據(jù)類名的頭字段判斷類在哪個目錄下;
如果類能在這些目錄下找到,類在使用前就會被加載。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PHP實(shí)現(xiàn)通過中文字符比率來判斷垃圾評論的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)通過中文字符比率來判斷垃圾評論的方法,是一個比較實(shí)用的技巧,對于進(jìn)行PHP應(yīng)用程序開發(fā)來說有一定的參考借鑒價值,需要的朋友可以參考下2014-10-10
PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計》之三 重新組織數(shù)據(jù)
承接上文的PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計》之 重新組織你的函數(shù)繼續(xù)重構(gòu)方面的內(nèi)容2012-04-04
php變量與JS變量實(shí)現(xiàn)不通過跳轉(zhuǎn)直接交互的方法
這篇文章主要介紹了php變量與JS變量實(shí)現(xiàn)不通過跳轉(zhuǎn)直接交互的方法,涉及php與javascript變量傳輸及代碼混編相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
ajax+php打造進(jìn)度條 readyState各狀態(tài)
php 打造進(jìn)度條 readyState各狀態(tài),需要的朋友可以參考下。2010-03-03
PHP新手用的Insert和Update語句構(gòu)造類
PHP新手用的Insert和Update語句構(gòu)造類,沒多大功能,學(xué)習(xí)php的朋友可以參考下2012-03-03

