Cet article présente principalement en détail le principe du chargement automatique des fichiers de classe par le framework PHP, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
Description : Projet d'entreprise. PHP est utilisé comme couche de transfert intermédiaire (recevant des requêtes http et utilisant des sockets pour communiquer avec C++). Puisque le code n'utilise pas de framework, ces éléments ont naturellement été écrits par les personnes précédentes. Récemment, cette couche inférieure a besoin d'être optimisée, j'ai donc jeté un œil à cette partie du code.
Objectif : La fonction principale de ce code est de charger toutes les classes de plug-in dans le répertoire principal en même temps. Chargez automatiquement les classes et les interfaces qui n'ont pas encore été définies. En enregistrant un chargeur automatique, le moteur de script a une dernière chance de charger les classes requises avant que PHP n'échoue avec une erreur.
Méthode d'implémentation : Utiliser principalement la fonction PHP __autoload()
Détails :
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; }
La fonction _getRootPath($classname) obtient le répertoire réel où se trouve le fichier du nom de classe et détermine dans quel répertoire se trouve la classe en fonction du champ d'en-tête du nom de classe
Si la classe ; peut être dans ces répertoires trouvés ci-dessous, la classe sera chargée avant utilisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!