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
1251 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