解析PHP入口文件的自动加载功能

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';

	}
}
相关文章
相关标签/搜索