来聊聊,spl_autoload_register的前世今生

简介: 来聊聊,spl_autoload_register的前世今生

前言

咔咔整理了一个路线图,着手打造一份面试宝典,准备按照这样的路线图进行编写文章,后期发现没有补充到的知识点在进行添加。也期待各位伙伴一起来帮助补充一下。评论区见哦!


image.png


一、spl_autoload_register前世今生

在刚刚接触PHP没有使用框架之前相信大多数伙伴都用过include和require,当然还有include_once和require_once。


这俩个区别还记得吗?


include引入报错时只会有警告,而require则会直接让脚本停止。


在PHP5.3引入了命名空间的概念,为此在PHP文档中记载着11年前一位贡献者是这样说的,I made this benchmark to ensure that I don't recommend something that could be called "nice, but slow" later。


翻译过来是“我做的这个测试,是为了确保我以后不推荐可以称之为不错,但是很慢的东西”。


做的这个测试就是定义了10个文件夹,每个文件夹有10个子文件夹并且每个子文件夹里都有10个类,然后使用了autoload和spl_autoload对比之后,平均执行时间多50ms。


那么这个东西指的就是_autoload(),终将这个方法在PHP7.2被废弃。


那么除了效率问题之外还有一个原因最终废弃了_autoload这个方法。


spl_autoload_register可以根据自己需求写多个,加载顺序是按照队列方式,先进先出。


autoload是全局函数,所以只能定义一次,多次定义会报错。如果一个项目使用多个框架实现,就会引发这样的问题。


二、spl_autoload_register简单使用

这个函数只有三个参数,第一个参数为自动加载的函数,第二参数为自动注册的函数失败时是否抛出异常,第三个参数为添加函数到队列之首,而不是队列尾部。


以上都是根据true定义的。


定义俩个文件say和user


say文件声明一个类Say并且设置一个方法hello


image.png


这时来到user文件,我们需要先定义一个autoload方法,然后使用spl_autoload_register进行注册


image.png

打印出来的数据结果

image.png

相关文章
|
10月前
|
设计模式 存储 架构师
ThinkPHP5源码阅读-类的自动加载register与autoload的实现
PHP快速入门与实战ThinkPHP是国内最流行的一款PHP框架,是国人自主研发的框架,起源于2006年,经过了十几年的不断发展。已经成为了一款被PHP广泛认可的性能开发效率兼具的利器。阅读框架源码有助于我们更好的学习语言基础,拓展设计模式等相关能力。同时很多设计与编码的思想也能更好的指导我们日常工作,尤其是想成为资深程序员或者架构师方面的同事,这是一个必须要学习的过程。今天是ThinkPHP5源码第一讲,关于类的自动加载,看看源码底层是怎么实现的。怕迷路的同学,先给个关注吧。
PHP的spl_autoload_register()函数是干什么的?底层原理是什么?
PHP的spl_autoload_register()函数是干什么的?底层原理是什么?
104 0
|
缓存 PHP
Composer报错: require(): Failed opening required ‘.../markbaker/matrix/.../functions/adjoint.php‘
Composer报错: require(): Failed opening required ‘.../markbaker/matrix/.../functions/adjoint.php‘
209 0
SAP UI5 library-dbg.js - local location
Created by Wang, Jerry, last modified on Mar 23, 2015
99 0
SAP UI5 library-dbg.js - local location