做个web框架(9)——Autoload自动加载器的实现【20201102】

发表于 2020-11-02 14:18:05
阅读 32

介绍

介绍

我们的TFPHP已经实现了路由TFRouter、控制器TFController、模型TFModel的模块的实现,同时我们还将php的数据库操作对象PDO扩展封装到了我们自己的对象TFDO里面。目前的TFPHP已经可以足够支持完成一般网站、小型平台的开发框架了。

今天福哥会解决TFPHP的加载问题,大家都发现了,每次我们建立了新的模块对象之后就会到TFRouteMap.php这个框架入口程序里面增加一个include语句,这个在生产环境里面是不可想象的。

为了解决这个问题,我们可以借助php的自动加载注册函数spl_autoload_register将我们的一个函数注册起来,当有代码调用模块对象的时候就会将模块对象作为参数传递给这个函数,最后我们在这个函数里面完成调用的模块对象的实现程序代码文件的包含。

自动加载器

我们在TFPHP的System下面建立一个自动加载器文件,程序文件名称是Autoload.inc.php。

Autoload.inc.php

TFPHP_Autoload

define('FRAMEWORK_ROOT_PATH', realpath(__DIR__. "/.."). "/");
define('FRAMEWORK_CLASS_EXTENSION', ".inc.php");

function TFPHP_Autoload(string $class):bool {
    $classPath = FRAMEWORK_ROOT_PATH. substr(str_replace("\\", "/", $class), 6). FRAMEWORK_CLASS_EXTENSION;
    if(file_exists($classPath)){
        include_once ($classPath);

        return true;
    }

    return false;
}

spl_autoload_register("TFPHP_Autoload");

TFRouteMap.php

use TFPHP\System\TFRouter;

define('WEB_INF_ROOT_PATH', __DIR__. "/WEB-INF/");
define('ROUTEMAP_REQUEST_URI', $_SERVER['QUERY_STRING']);
include_once ('./System/Autoload.inc.php');

new TFRouter(
    WEB_INF_ROOT_PATH,
    ROUTEMAP_REQUEST_URI
);

讲解

现在我们来讲解一下这个自动加载器的工作原理。

Autoload.inc.php

TFPHP_Autoload

在这个函数里面,我们会根据传入参数进行自动解析拼凑出引用对象的程序文件的物理路径,将它引用进来。

TFRouteMap.php

修改了这个TFRouteMap.php文件,去掉了FRAMEWORK_ROOT_PATH常量定义,引入了System\Autoload自动加载器文件。

2bccf8a585c9540e.jpg

总结

福哥这节课讲解了如何自动加载TFPHP框架里面的模块对象,有了这个设定之后,我们的TFPHP框架也就基本完成了。现在的TFPHP完全可以胜任一些小型网站、小型平台的开发框架的工作了。

下面福哥会带着童鞋们使用我们的TFPHP框架开发一个用户认证系统,这个系统需要实现一个网站或者平台最基础的用户模块功能,包括:用户注册、用户登录、资料修改、密码修改等等。

5. P.S.

微信公众号的文章发出去之后是不能编辑的,但是福哥偶尔会修复一些描述不到位、示例不正确、结构不清晰等等的文章错误,这些只能在网站上才能看到最新版本内容,望大家知晓~~