這篇文章主要為大家詳細介紹了PHP框架自動載入類別檔案原理,具有一定的參考價值,有興趣的小夥伴們可以參考一下
描述:公司專案PHP用作中間轉送層(接收http請求,用socket跟c++做通訊),由於程式碼沒有用到框架,這些東西自然就是之前的人自己寫的。最近需要對這個底層進行最佳化,於是便看了下這部分的程式碼。
目的:這塊程式碼的主要作用是把主目錄下的所有外掛類別一次全部載入進來。當使用尚未被定義的類別(class)和介面(interface)時自動去載入。透過註冊自動載入器,腳本引擎在 PHP 出錯失敗前有了最後一個機會載入所需的類別。
實作方法:主要用到PHP函數__autoload()
#詳細:
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) { ///优化包含路径 $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)函數取得的是類別名稱檔案所在的真實目錄,根據類別名稱的頭字段判斷類別在哪個目錄下;
如果類別能在這些目錄下找到,類別在使用前就會被載入。
以上是詳解PHP框架自動載入類別的檔案原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!