Maison  >  Article  >  développement back-end  >  Explication détaillée du principe des fichiers de chargement automatique des classes dans le framework PHP

Explication détaillée du principe des fichiers de chargement automatique des classes dans le framework PHP

怪我咯
怪我咯original
2017-06-16 10:42:281191parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn