php奇技淫巧之自动装载

知识储备:

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

测试目录结构

<?php
include "load.php";
TestsTest1::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__." ";
        echo __FILE__." ";
    }
}

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

测试结果:

自动装载的实现很简单

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

<?php
include "load.php";
TestsTest1::test();

function aa(){
    TestsTest2::test();
}

echo "测试加载顺序 ";

aa();

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

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

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

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

原文地址:https://www.cnblogs.com/yuanyuanyuan/p/10821486.html