Maison > développement back-end > tutoriel php > 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

怪我咯
Libérer: 2023-03-10 14:12:02
original
1271 Les gens l'ont consulté

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;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal