PhilePhP中的隐形自动加载

时间:2015-10-14 11:59:38

标签: php autoload

我刚刚浏览了PhileCMS的代码并遇到了以下几行代码:

if (Registry::isRegistered('Phile_Settings')) {
    $config = Registry::get('Phile_Settings');
    if (!empty($config['base_url'])) {
        return $config['base_url'];
    }
}

可以看到该文件 HERE

为什么可以在此处使用类Registry的静态方法,当文件未包含或根本不需要时?后端是否有某种自动加载无法看到?如果是这样,这种新型的自动加载机制出现了什么?

1 个答案:

答案 0 :(得分:1)

详细了解PHP中的自动加载类:http://php.net/manual/en/language.oop5.autoload.php

在PhileCMS中,自动加载类是在Phile\Bootstrap::initializeAutoloader()方法中进行的(为方便起见,从github复制粘贴方法体):

spl_autoload_extensions(".php");
// load phile core
spl_autoload_register(function ($className) {
    $fileName = LIB_DIR . str_replace("\\", DIRECTORY_SEPARATOR, $className) . '.php';
    if (file_exists($fileName)) {
        require_once $fileName;
    }
});
// load phile plugins
spl_autoload_register('\Phile\Plugin\PluginRepository::autoload');
require(LIB_DIR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');

https://github.com/PhileCMS/Phile/blob/master/lib/Phile/Bootstrap.php#L93