13:类的自动加载

类的自动加载

  • 当你在某个PHP文件中去使用一个你不确定的类的时候,你无法确定包含这个类的外部文件是否被引用

  • Once函数效率又很低

  • 请使用__autoload($className)函数,当你引用的类不存在的时候,你可以在这个函数中去引用包含文件

    • 这个函数是当你引用一个不存在的类时,系统给你一次在报错之前进行处理的机会
    • 也就是说这个函数触发的时机是,类不存在–》执行__autoload函数–》报错
    • 这个函数接受一个参数,这个参数是你引用的而不存在的类名
  • 示例:

$a = new moudle1();

function __autoload($className){
	include('/module/' . $className . '.php');
}
  • 当实例化moudle1这个类时,到这一行,肯定是要报错的,如果没有其他的处理方法
  • 当判断当前页面无此类时,而也没有那么引入的文件有这个类,则进入__autoload函数中,此时,你可以引用与之对应的文件,当然这个就看你自己的命名了;
  • 类声明全局有效,不管是在多深的作用域中

自定加载函数换个名字

  • spl_autoload_register,注册给定的函数作为__autoload函数的实现;
  • 上面这句话就是说,注册一个函数,作为__autoload函数的替换,就是换个名字;
  • 他还有两个参数,具体的请翻阅PHP手册;
  • 静态方法也可以作为自动加载方法,示例:
class Say{
	static function zidongjiazai($class){
		echo $class;
	}
}

spl_autoload_register(array('Say','zidongjiazai'));
spl_autoload_register('Say::zidongjiazai');


new C();
  • 如果用类的话,则方法必须是静态的;

自动加载的应用场景

  • 例如你可以做一个文件自动加载的系统
  • 只要规定好PHP文件名,比如类文件,模型文件,模块文件,组件文件,分别命名成不同的单词
  • 如果文件名中存在某个类型文件的关键词,那就去这个对应的目录下去加载,就不用在每个文件里都去手动加载文件了;
  • __autoload函数不能被重复定义,所以当你想对不同类型文件进行目录上的不同引用,你可以写if…else…,但是更好的方法是,你可以实用spl_autoload_register函数去注册多个__autoload的实现方法
  • 按照注册的先后顺序进行加载;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值