Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung des Dateiprinzips des automatischen Ladens von Klassen im PHP-Framework

Ausführliche Erläuterung des Dateiprinzips des automatischen Ladens von Klassen im PHP-Framework

怪我咯
怪我咯Original
2017-06-16 10:42:281241Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn