In diesem Artikel wird hauptsächlich das Prinzip des automatischen Ladens von Klassendateien durch das PHP-Framework ausführlich vorgestellt, das einen gewissen Referenzwert hat.
Beschreibung: Unternehmensprojekt PHP wird als Zwischenweiterleitungsschicht verwendet (Empfang von HTTP-Anfragen und Verwendung von Sockets zur Kommunikation mit C++, da der Code kein Framework verwendet, wurden diese Dinge natürlich von den vorherigen Leuten geschrieben). Da diese unterste Ebene kürzlich optimiert werden muss, habe ich mir diesen Teil des Codes angesehen.
Zweck: Die Hauptfunktion dieses Codes besteht darin, alle Plug-in-Klassen im Hauptverzeichnis auf einmal zu laden. Laden Sie automatisch Klassen und Schnittstellen, die noch nicht definiert wurden. Durch die Registrierung eines Autoloaders hat die Skript-Engine eine letzte Chance, die erforderlichen Klassen zu laden, bevor PHP mit einem Fehler abstürzt.
Implementierungsmethode: Hauptsächlich unter Verwendung der PHP-Funktion __autoload()
Details:
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; }
Die Funktion _getRootPath($classname) ermittelt das tatsächliche Verzeichnis, in dem sich die Klassennamendatei befindet, und bestimmt anhand des Header-Felds des Klassennamens, in welchem Verzeichnis sich die Klasse befindet Kann in diesen Verzeichnissen gefunden werden. Die Klasse wird vor der Verwendung geladen.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Dateiprinzips des automatischen Ladens von Klassen im PHP-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!