php奇技淫巧之自动装载

知识储备:

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

 

测试目录结构

php奇技淫巧之自动装载

 

 

<?php
include "load.php";
Tests\Test1::test();

------------index.php

 

<?php
class Loader
{
    static function loadClass($class)
    {
        $class =  __DIR__.DIRECTORY_SEPARATOR.str_replace('\\','/',$class).'.php';
        $class = strtolower($class);
        if (file_exists($class)) {
            include $class;
            return;
        }
    }
}
spl_autoload_register(array('Loader','loadClass'));

------------load.php

<?php
namespace Tests;
class Test1{
    static function test(){
        echo __CLASS__."\n";
        echo __FILE__."\n";
    }
}

 

----------./test/test1.php

 

 

测试结果:

php奇技淫巧之自动装载

 

 

自动装载的实现很简单

 

思考:1、是不是使用时才会触发?

 

<?php
include "load.php";
Tests\Test1::test();

function aa(){
    Tests\Test2::test();
}

echo "测试加载顺序 \n";

aa();

写了一个小实验 同test1的test2,通过注释aa(),证明只有在调用时才会加载执行

php奇技淫巧之自动装载

 

 

这样一来动态装载的价值就体现出来了

1、调用时候才加载该文件,减少了实际执行文件大小   幻想一下一个大文件里面调用其中一个函数只需加载该函数依赖的文件就可以了,而不是整个文件依赖的文件

2、不用在头部一通require/include,增加了美观度   如果程序员不追求代码美观跟咸鱼有什么区别

 

上一篇:使用 dotnet test 和 xUnit 在 .NET Core 中进行 C# 单元测试


下一篇:关于linux中执行脚本或程序时指定的路径