十二月
21
2016

笔记019 通过 spl_autoload_register 实现自动加载

spl_autoload_register

(PHP 5 >= 5.1.2, PHP 7)

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

语法

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

说明

通过这个函数,可以为加载的类指定寻址方式,这样就不用大批量地 requireinclude 了。系统会自动按照指定的规则,到对应的位置下面去寻找需要实例化的类。虽然这个方法比较底层,在有框架的情况下,一般都不需要我们去做这些工作了。但是难免还是有要用的时候,比如我写这个博客的时候,我就自己需要捣腾脚本,这个时候,就绕不开了。下面的例子,就是我的脚本中要用的一个简单的自动加载的程序。

例子

spl_autoload_register(function ($class) {
    $rootPath = realpath(sprintf('%s/..', __DIR__));
    $paths = array(
        'src',
    );
    foreach ($paths as $path) {
        if (is_file(
            $file = $rootPath . DIRECTORY_SEPARATOR . $path . DIRECTORY_SEPARATOR . $class
            . '.php'
        )) {
            include $file;
            break;
        }
    }
});

注意,匿名函数是 PHP 5.3 及以上 才可以用的,如果发现不能用,检查一下自己的 PHP 版本。我这里只是简单地指定所有的类在我的 src 文件夹下寻找,类名与文件名完全一致。

非特殊注明博文为 爱PHP吧(www.iphp8.com)原创内容,转载请注明原文地址:http://www.iphp8.com/?post=106

评论
肥猫 2017-02-13 09:11回复
谢谢!我这就去找找!
肥猫 2017-02-10 14:22回复
博客源码能给我份吗?研究研究
Hy369 2017-02-10 17:12回复
@肥猫:emlog 的源码哦,你可以直接到 emlog 下载的!
美剧天堂 2017-01-11 17:30回复
博客很漂亮
Hy369 2017-01-11 17:31回复
@美剧天堂:谢谢,有些时间没有打理博客了,哈哈!

发表评论:

(选填)

(选填)