这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
下面小编就为大家带来一篇深入理解 PHP 类的自动载入机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
php 的自动加载:
在 php5 以前,我们要用某个类或类的方法,那必须 include 或者 require,之后才能使用,每次用一个类,都需要写一条 include,麻烦
php 作者想简单点,最好能引用一个类时,如果当前没有 include 进来,系统能自动去找到该类,自动引进~
于是:__autoload() 函数应运而生。
通常放在应用程序入口类里面,比如 discuz 中,放在 class_core.php 中。
先讲浅显的例子:
第一种情况:文件 A.php 中内容如下
- <?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文件
- ?>
第二种情况:有时我希望能自定义 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 类的自动载入机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/0801/342705.html