php的自动加载:php
在php5之前,咱们要用某个类或类的方法,那必须include或者require,以后才能使用,每次用一个类,都须要写一条include,很是麻烦。php框架
后来自从php5以后,对这个需求作了改进,若是当前没有include进来,系统能自动去找到该类,自动引进~框架
因而:__autoload()函数应运而生。
实例以下A:
函数
index文件以下: 经过单一入口调用其余类的方法,类不存在则会自动引入 $a=new Test(); function __autoload($class) { require __DIR__.'/'.$class.'.php'; } 注意:这是最先的方式,可是已经被废弃,由于一个php工程可能须要依赖多个框架, 可是若是每一个框架或者工程都加载这个函数的话,就会冲突,报错,函数重复。
后来自从5.3以后,出现了spl_autoload_register()这个函数,来进行类自动引入,,容许这个引入函数重复。ui
实例以下B:spa
spl_autoload_register('autoload'); spl_autoload_register('autoload1'); function autoload($class) { require __DIR__.'/'.$class.'.php'; } function autoload1($class) { require __DIR__.'/'.$class.'.php'; } Test3::test(); Test4::test(); //容许多个引入重复,我经过调用类,来引入多个文件,但最终都是调用一次
这2个还不够,可是若是我若是要写一个php框架的话,经过单一入口的方式,访问某个类文件,那么我该把这个函数作成一个类,作成路由,经过这个路由,来加载和使用文件。code
实例C:路由
单一入口:index.php <?php define('BASEDIR', __DIR__); include BASEDIR.'/IMooc/Loader.php'; spl_autoload_register('\\IMooc\\Loader::autoload'); ?> 路由类加载类:Loader.php <?php namespace IMooc; class Loader { static function autoload($class) { // echo BASEDIR.'/'.str_replace('\\','/',$class).'.php'; //把命名空间的路径替换成正式路径便可 require BASEDIR.'/'.str_replace('\\','/',$class).'.php'; } }