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

php的自动加载:

在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,非常麻烦。

后来自从php5之后,对这个需求做了改进,如果当前没有include进来,系统能自动去找到该类,自动引进~

于是:__autoload()函数应运而生。

实例如下A:
 

index文件如下:
通过单一入口调用其他类的方法,类不存在则会自动引入
$a=new Test(); 
function __autoload($class)
 {
    require  __DIR__.'/'.$class.'.php';

 }
注意:这是最早的方式,但是已经被废弃,因为一个php工程可能需要依赖多个框架,
但是如果每个框架或者工程都加载这个函数的话,就会冲突,报错,函数重复。

后来自从5.3之后,出现了spl_autoload_register()这个函数,来进行类自动引入,,允许这个引入函数重复。

实例如下B:

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框架的话,通过单一入口的方式,访问某个类文件,那么我该把这个函数做成一个类,做成路由,通过这个路由,来加载和使用文件。

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

	}
}

 

转载于:https://my.oschina.net/u/3058368/blog/790733

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值