English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
PHP-Autoload:
In PHP5Früher mussten wir eine Klasse oder einen Methodenaufruf einer Klasse verwenden, indem wir include oder require verwenden mussten, bevor wir sie verwenden konnten, was lästig war, da für jede verwendete Klasse ein include geschrieben werden musste
PHP-Autoren möchten es einfacher haben, dass das System automatisch die Klasse findet und einführt, wenn eine Klasse nicht bereits eingebunden ist
Daher ist die Funktion __autoload() entstanden.
Normalerweise in der Anwendungseingangsklasse platziert, z.B. in discuz, in class_core.php.
Lassen Sie uns zunächst einen einfachen Beispiel erläutern:
Erste Situation:Datei A.php Inhalt wie folgt
<?php class A{ public function __construct(){ echo 'fff'; } } ?>
Der Inhalt der Datei C.php ist wie folgt:
<?php function __autoload($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } $a = new A(); //Hier wird automatisch __autoload aufgerufen, um die Datei A.php einzuführen ?>
第二种情况:有时我希望能自定义 autoload,并且希望起一个更酷的名字 loader,则 C.php 改为如下:
<?php function loader($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } spl_autoload_register('loader'); //注册一个自动加载方法,覆盖原有的 __autoload $a = new A(); ?>
第三种情况:我希望高大上一点,用一个类来管理自动加载
<?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(); ?>
当前为最佳形式。
通常我们将 spl_autoload_register(*) 放在入口脚本,即一开始就引用进来。比如下面 discuz 的做法。
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); } }
这段放在入口文件最前面,自然是极好的~
以上这篇深入理解 PHP 类的自动载入机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。