PHP设计模式学习笔记一——关于PHP类的自动加载

227 阅读1分钟

序言

当工程级别的代码需要引入很多外部文件时,会导致在类文件的头部书写很多类似下面的代码:

require_once __DIR__.'/'.$class.'.php';

这种情况下我们可以使用__autoload()函数来实现类的自动加载,但是由于函数重名的问题,PHP 官方目前推荐使用spl_autoload_register()函数来替代__autoload()函数,因为我们可以自己定义自动加载类的函数的名称,然后在spl_autoload_register()函数中实现这些类的调用。

代码演示

定义两个测试类Test1.phpTest2.php以及一个测试入口类Test.php

Test1.php

<?php
class Test1{
    static function test(){
        echo __METHOD__."\n";
    }
}

Test2.php

<?php
class Test2{
    static function test(){
        echo __METHOD__."\n";
    }
}

测试入口类

<?php

spl_autoload_register('autoload1');
Test1::test();
Test2::test();

function autoload1($class){
    require_once __DIR__.'/'.$class.'.php';
}

可以看到我们在入口类中自定义了一个类的自动加载函数autoload1() 然后在spl_autoload_register()函数中去声明了自动加载函数的调用。

运行结果

/usr/bin/php /Users/yang/PHPCode/Test.php
Test1::test
Test2::test

Process finished with exit code 0

可以看到不同的类中的方法已经成功调用,并且程序没有报错。