PHP使用spl_autoload_register实现装载类

以下spl_autoload_register介绍,来自官方文档介绍说明:

地址:https://www.php.net/manual/zh/function.spl-autoload-register.php

spl_autoload_register

(PHP 5 >= 5.1.0, PHP 7)

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

说明

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

将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。

如果在你的程序中已经实现了__autoload()函数,它必须显式注册到__autoload()队列中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload()函数取代为spl_autoload()spl_autoload_call()

如果需要多条 autoload 函数,spl_autoload_register() 满足了此类需求。 它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。相比之下, __autoload() 只可以定义一次。

参数

 

autoload_function

欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()

throw

此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。

prepend

如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

 

核心示例代码:

<?php

use app\ClassD;

//定义根目录路径
define("ROOT",__DIR__.DIRECTORY_SEPARATOR);

/**
 * 功能:自动装载类
 * @author li914
*/
class AutoloadClass
{
    /**
     * 功能:自动装载静态方法
     * @param string $className 类名 例如:ClassA 或 app/ClassD
     * @return void
    */
    public static function autoload($className)
    {
        $classPath = ROOT;
        //获取 名称空间名称
        $namespace = mb_substr($className,0,mb_strpos($className,"\\"));
        //判断是否存在 名称空间
        if (!empty($namespace)){
            $classPath .= $namespace.DIRECTORY_SEPARATOR;
        }
        //判断是否 已存在类
        if (class_exists($className)){
            return;
        }
        //获取类名
        $class = mb_substr($className,mb_strlen($namespace));
        $classPath .= $class.".php";

        if (file_exists($classPath)){
            include_once $classPath;
        }else{
            //若未找到 则抛出异常
            throw new RuntimeException("$className file $classPath not found!");
        }
    }
}

/**
 * $autoload_function 自动加载方法
 * $throw 是否抛出注册失败异常
 * $prepend 是否放到队首
*/
spl_autoload_register('AutoloadClass::autoload',true,true);

$classA = new ClassA();
$classd = new ClassD();

 

具体的示例地址:https://github.com/li914/php_autoload

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值