Automatisches Laden von PHP:
Wenn wir vor PHP5 eine bestimmte Klasse oder Klassenmethode verwenden wollten, mussten wir diese einschließen oder erfordern, bevor wir sie verwenden konnten Es ist notwendig, ein Include zu schreiben.
Der PHP-Autor möchte es einfach machen. Es ist am besten, auf eine Klasse zu verweisen. Wenn derzeit kein Include vorhanden ist, kann das System die Klasse automatisch finden und automatisch einführen~
Also: __autoload() Funktionen entstanden.
wird normalerweise in der Anwendungseintragsklasse platziert, z. B. discuz, in class_core.php.
Lassen Sie uns zunächst über ein einfaches Beispiel sprechen:
Der erste Fall: Der Inhalt der Datei A.php ist wie folgt
<?php class A{ public function __construct(){ echo 'fff'; } } ?> 文件C.php 中内容如下: <?php function __autoload($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } $a = new A(); //这边会自动调用__autoload,引入A.php文件 ?>
Der zweite Fall: Manchmal hoffe ich Um das automatische Laden anzupassen und dem Lader einen cooleren Namen zu geben, sollte C.php wie folgt geändert werden:
<?php function loader($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } spl_autoload_register('loader'); //注册一个自动加载方法,覆盖原有的__autoload $a = new A(); ?>
Die dritte Situation: Ich möchte anspruchsvoller sein und eine Klasse verwenden, um das automatische Laden zu verwalten wird geladen
<?php class Loader { public static function loadClass($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } } spl_autoload_register(array('Loader', 'loadClass')); $a = new A(); ?>
Derzeit die beste Form.
Normalerweise setzen wir spl_autoload_register(*) in das Eingabeskript, also von Anfang an in Anführungszeichen. Zum Beispiel der folgende Discuz-Ansatz.
if(function_exist('spl_autoload_register')){ spl_autoload_register(array('core','autoload')); //如果是php5以上,存在注册函数,则注册自己写的core类中的autoload为自动加载函数 }else{ function __autoload($class){ //如果不是,则重写php原生函数__autoload函数,让其调用自己的core中函数。 return core::autoload($class); } }
Diesen Absatz an den Anfang der Eintragsdatei zu setzen ist natürlich ausgezeichnet~