我刚刚浏览了PhileCMS的代码并遇到了以下几行代码:
if (Registry::isRegistered('Phile_Settings')) {
$config = Registry::get('Phile_Settings');
if (!empty($config['base_url'])) {
return $config['base_url'];
}
}
可以看到该文件 HERE
为什么可以在此处使用类Registry
的静态方法,当文件未包含或根本不需要时?后端是否有某种自动加载无法看到?如果是这样,这种新型的自动加载机制出现了什么?
答案 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