php的spl_autoload_register()函数实例分析

发布时间:2022-03-18 16:23:22 作者:iii
来源:亿速云 阅读:281

本篇内容主要讲解“php的spl_autoload_register()函数实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php的spl_autoload_register()函数实例分析”吧!

spl_autoload_register()函数

PHP的SPL库作为扩展库,已经于5.3.0版本后默认保持开启,成为PHP的一组强大的核心扩展库。大家有时间可以多研究研究SPL里面的方法功能。而且,SPL中包含很多类库哟,在设计模式的系列文章中,我们也会再次见到他们的身影!

这回我们建立一个文件,叫做spl_autoload_register.php,然后将下面的代码复制进去吧:


<?php

spl_autoload_register(function( $className ){
   require $className . '.php';
});

$m = new TestClass();
$m->show();



是不是和__autoload()很像,当然作用也很像。我们直接运行这个文件试试,会发现TestClass.php也正常的加载了进来。那么为啥不直接用__autoload()函数,而使用sql_autoload_register()这么诡异的函数,而且还有个神奇的闭包参数!!!

我们先看看它的定义和格式

PHP官方文档中的定义

注册给定的函数作为 __autoload 的实现

没错,那个匿名函数就是一个__autoload()函数,我们可以理解为给当前这个PHP文件中注册一个__autoload()函数,而使用匿名函数的原因呢?当然就是为了闭包特性,最主要的就是能够带来延迟加载(懒加载 )的实现!

另外,spl_autoload_register()函数不止是仅仅去注册一个__autoload(),它实现并维护了一个__autoload()队列。原来在一个文件中只能有一个__autoload()方法,但现在,你拥有的是一个队列。

函数格式

spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool

有点长,我们一步步看:

改造代码

嗯,到这里好像有点复杂了,我们需要改造改造代码这样才能让大家看得更清晰,先准备另一个需要加载的类文件,就叫CaseClass.php好了

<?php

class CaseClass
{
   public function show()
   {
       echo "Good!\n";
   }
}

然后修改spl_autoload_register.php文件

<?php

// 使用匿名函数方式
spl_autoload_register(function( $className ){
   echo "first==>\n";
   require_once 'TestClass.php';
});

// 需要注册的外部__autoload()实现
spl_autoload_register('CaseAutoLoad');

function CaseAutoLoad( $className ){
   echo "second==>\n";
   require_once 'CaseClass.php';
}

$m = new TestClass();
$m->show();

echo "--------\n";

$s = new CaseClass();
$s->show();

什么都别说了,直接运行吧,如果有报错请检查下哪里写错了,反正我这里没错~~

正常情况下应该输出这样的内容

php的spl_autoload_register()函数实例分析

  1. "first==>"是我们原来的spl_autoload_register()函数输出的内容,这里我们没有使用$className来动态加载,而是只加载TestClass.php这一个文件

  2. 接下来我们便输出了TestClass里面的show()方法的内容。需要注意的是:这里可还没有加载CaseClass.php这个文件哦,也就是现在我们已经实现了懒加载了哦

  3. 接下来,我们想要实例化CaseClass对象,于是spl_autoload_register()维护的队列发挥作用了。先走第一条,利用require_once()对于之前已经加载过的TestClass.php不会再次加载了。但是这一个文件中并没有找到我们需要的CaseClass对象,于是我们进入了队列第二条,来到了CaseAutoLoad()方法中,CaseClass.php终于在这个方法中被require_once()进来了

到这里,你已经知道了这个函数最大的作用就是维护的这个队列并且可以延迟加载我们需要的文件。是不是感觉有点要走上人生巅峰了?不不不,你心里或许还在疑惑,这玩意跟Composer有啥关系?

请在您需要测试的目录初始化一个Composer

到此,相信大家对“php的spl_autoload_register()函数实例分析”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 如何通过PHP内置web服务器实现简单的调试应用
  2. 如何让vscode支持php函数跳转功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:Java的IO模型和Netty框架是什么

下一篇:php PSR规范中的PSR4和PSR0规范实例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》