IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php中__autoload和spl_autoload_register的区别 -> 正文阅读

[PHP知识库]php中__autoload和spl_autoload_register的区别

这里我们讨论下php中__autoload和spl_autoload_register的区别, 当然并不是很完善, 毕竟比较复杂, 但是能用就行.

__autoload作用

在php的早期是没有spl_autoload_register函数的, 只有__autoload函数, 作用是自动加载类库.

当我们php文件中要引入其他类库时, 往往需要使用require_once来手动加载, 但当类库很多, 这样就显得繁琐, 往往一个文件要使用十几个require_once, 为了避免这种情况我们可以使用__autoload函数, 来实现自动加载.

__autoload应用举例

  1. 实现__autoload函数, 当php加载某个没注册的类时, 会自动调用, 并默认传入类的全路径的namespace加类名, 我们可以通过解析namespace和类名找到文件位置
function __autoload($namespaceWithClassName){
  //伪代码解析得到文件位置
  $filePath = parse($namespaceWithClassName);
  //加载
  if(is_file($filePath)){
    require_once($filePath);
  }
}


  1. 下面有两个文件, 文件一实现了一个类, 文件二调用了该类, 由于我们实现了__autoload函数, 所以在文件二中不需要用require引入文件一, php会自动调用__autoload函数执行, 自动加载文件一, 这样就能使我们代码非常简洁
<?php
//文件一
class A{

}


<?php //文件二 $a = new A(); //在文件二中不需要用require引入文件一 ``` spl\_autoload\_register的作用 -------------------------- spl\_autoload\_register的全名是 standard php library autoload register, 意思是php标注库的autoload注册函数, 其实就是\_\_autoload的升级版本, 和\_\_autoload作用一样. 我们仔细观察\_\_autoload就能发现该函数的缺点: 1. 必须实现\_\_autoload, 而不能随心所欲的实现自己喜欢名称的函数 2. 全局只有实现一个自动加载函数, 不能实现多个自动加载函数, 不够灵活 3. 自动加载函数不能卸载, 不够灵活, 使用spl\_autoload\_register注册的自动加载函数, 可以被spl\_autoload\_unregister卸载掉 说白了, spl\_autoload\_register就是为了解决\_\_autoload不够灵活的缺点, 通过spl\_autoload\_register可以注册多个自动加载函数, 并且能根据情况灵活调用 spl\_autoload\_register应用举例 --------------------------- 1. 实现多个自动加载函数, 函数名随意取, 但是要记住, php还是会默认传入全路路径namespace加类名做为参数. ``` //自动加载函数1 function my_autoload_func_first($namespaceWithClassName){ //加载逻辑 ... } //自动加载函数2 function my_autoload_func_second($namespaceWithClassName){ //加载逻辑 ... } ``` 2. 使用spl\_autoload\_register注册上面的加载函数 ``` spl_autoload_register(my_autoload_func_first) spl_autoload_register(my_autoload_func_second) ``` 总结 -- 反正使用spl\_autoload\_register就对了 文章首发于: [https://w2fenx.com/300.html](https://w2fenx.com/300.html)
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:49:24  更:2022-01-16 12:51:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:24:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码