本文实例讲述了PHP中的自动加载操作实现方法。分享给大家供大家参考,具体如下:
what is 自动加载?
或许你已经对自动加载有所了解。简单描述一下:自动加载就是我们在new一个class的时候,不需要手动去写require来导入这个class.php文件,程序自动帮我们加载导入进来。这是php5.1.2(好像是)版本新加入一个功能,他解放了程序员的双手,不需要手动写那么多的require,变得有那么点智能的感觉。
自动加载可以说是现代PHP框架的根基,任何牛逼的框架或者架构都会用到它,它发明出来的理由是啥呢?一个字:懒。因为项目越来愈大,相关联的类库文件越来越多,我们不可能再像小项目那样在一个文件中全部手动一个一个require
。
如何才能自动加载呢? PHP 5.2版本更新了自动加载需要的一个魔术方法——__autoload($class_name)
正是这个神奇的内置魔术函数,才能让我们这些屌丝偷懒。我们来看下这个如何使用它。
1. 自动加载的原理以及__autoload的使用
自动加载的原理,就是在我们new
一个class的时候,PHP系统如果找不到你这个类,就会去自动调用本文件中的__autoload($class_name)
方法,我们new
的这个class_name 就成为这个方法的参数。所以我们就可以在这个方法中根据我们需要new class_name的各种判断和划分就去require对应的路径类文件,从而实现自动加载。
我们先一步步来,看下__autoload()
的自动调用,看个例子:
index.php
$db =new DB();
如果我们不手动导入DB类,程序可能会报错,说找不到这个类:
Fatal error: Class 'DB' not found in D:\wamp\www\testphp\autoload\index.php on line 3
那么,我们现在加入__autoload()
这个方法再看看:
$db =new DB(); function __autoload($className) { echo $className; exit(); }
根据上面自动加载机制的描述,你分析下会输出什么? 没错:肯定是输出:DB, 也就是我们需要new
的类的类名。所以,这个时候我们就可以在__autoload()
方法里,根据需要去加载类库文件了。
index.php
$db =new DB(); function __autoload($className) { require $className .'.php'; }
DB.php
class DB { publicfunction __construct() { echo 'Hello DB'; } }
这样子我们就很轻松的将我们需要new
的class 全部导入了进来,这样子,我们就可以轻松的