wordpress支付免签约插件,网站推广优化平台,网页升级未成年人自觉离开,wordpress正在执行例行维护_请一分钟后回来.配置加载
Config 对象默认不是通过组件中 Autoloader::beans() 方法加载的#xff0c;而是通过类注解的方式。
Config 中有init 方法#xff0c;这个方法在对象实例化的时候#xff0c;会自动执行#xff0c;这个代码我们在 BeanHandler 中见到过#xff0c;也就是 bean…配置加载
Config 对象默认不是通过组件中 Autoloader::beans() 方法加载的而是通过类注解的方式。
Config 中有init 方法这个方法在对象实例化的时候会自动执行这个代码我们在 BeanHandler 中见到过也就是 bean 的实例化阶段。通过跟踪 init 方法可以看到Config 对象支持读取两种类的配置文件php/yaml 类型默认使用的是 PHP 类型的配置文件。
PHP 配置文件解析器
解析器会找到主配置文件 base.php其他配置文件非 base.php 的所有文件并获取内部的配置信息。
解析器在加载 php 类型配置的时候只要是php后缀的文件且不是 base.php 都会将其读为配置配置项主键为配置文件的名字内容为配置文件中返回的关联数组。最后会将所有其他配置文件获得的数据先合并为一个其他配置项的关联数组然后再将此数组和 base.php 文件的主配置进行合并其他配置文件名的配置会覆盖 base.php 中键名一致的主配置。
详细代码见 src/Parser/PhpParser.php 文件中的获取配置信息函数
protected function getConfig(string $baseFileName, string $path): array
{// 生成指定目录的迭代器对象$iterator DirectoryHelper::iterator($path);$baseConfig [];$otherConfig [];/* var SplFileInfo $splFileInfo */// 遍历目录中的每个项目可能是目录也可能是文件foreach ($iterator as $splFileInfo) {// Ingore other extension file$ext $splFileInfo-getExtension();$ext strtolower($ext);// 不是 php 后缀直接跳过if ($ext ! Config::TYPE_PHP) {continue;}$fileName $splFileInfo-getFilename();$fileName strtolower($fileName);$filePath $splFileInfo-getPathname();// Exclude dir// 如果是目录也跳过if (is_dir($filePath)) {continue;}// Base config// 如果是 base.php 则获取其中内容作为主配置if ($fileName $baseFileName) {$baseConfig require $filePath;continue;}// Other config// 如果文件名不是 base.php则以文件名为键名文件内容为键值[$key] explode(., $fileName);$data require $filePath;// 将所有其他配置项合并为一个关联数组ArrayHelper::set($otherConfig, $key, $data);}// 最后将其他配置项 merge 到主配置项上注意 merge 覆盖原则为键名相同后边覆盖前面return ArrayHelper::merge($baseConfig, $otherConfig);
}Config 对象继承了 Collection 集合类有一系列的公共操作接口可以方便的检查、获取、写入、删除集合中的数据。具体可以参见 Collection 类。stdlib 组件中的 src/Collection.php 类。
Yaml 文件解析器
解析器会找到主配置文件 base.yaml和其他配置文件非 base.yaml的所有文件然后获取其内部配置。
Yaml 配置文件的解析流程和之前 php 文件的解析过程配置的加载和覆盖顺序一致只是对文件的具体配置解析的有差异最终都会形成配置的关联数组放到 Config 对象之内存储到内存中。
配置的应用
config 函数调用
function config(string $key null, $default null)
{if (!BeanFactory::hasBean(config)) {return sprintf(${.config.%s}, $key);}/* var Config $config */$config BeanFactory::getBean(config);return $config-get($key, $default);
}由以上代码可以判断出如下结论
${.xxx}花括号中为点开始的数据表示引用的配置。不是以点开始的表示引用的是一个 bean 实例。
如果不是以美元符号和花括号表示的引用值则表示这个是一个固定值会直接注入到对应的属性或者参数中。
Config 注解
Config(data.key)