<?php
namespace Core\Lib;
use Core\Exceptions\NoFileException;
/**
* 获取配置的文件
* Class Config
* @package Core\Lib
*/
class Config
{
private $configs = [];
/**
* 获取某个文件的某个配置参数值
* @param $file
* @param bool $key
* @return mixed|null
* @throws NoFileException
*/
public function get($file, $key = false)
{
return $this->getKeyInArr($this->getFileArr($file), $key);
}
/**
* 获取配置文件的数据
* @param $file
* @return mixed
* @throws NoFileException
*/
protected function getFileArr($file)
{
if (isset($this->configs[$file])) {
return $this->configs[$file];
}
$file = BASE_PATH . '/core/config/' . $file . '.php';
if (!is_file($file)) {
throw new NoFileException($file);
}
return $this->configs[$file] = require $file;
}
/**
* 使用 . 语法 在数组中获取键 值不存在,直接返回 null
* @param $arr
* @param $key
* @return mixed|null
*/
protected function getKeyInArr($arr, $key)
{
// 如果没有 key 则返回整个配置文件
if ($key === false) {
return $arr;
}
// 如果没有. 则直接返回这个键
if (strpos($key, '.') === false) {
return $arr[$key];
}
foreach (explode('.', $key) as $segment) {
$arr = $arr[$segment];
}
return $arr;
}
}
封装一个函数
/**
* 获取 file 文件的 key 配置值
* @param $file
* @param bool $key
* @return mixed|null
*/
function config($file, $key = false)
{
$config = \Core\Lib\RegisterTree::get(\Core\Lib\Config::class);
return $config->get($file, $key);
}
比如有一个 config/log.php 文件
<?php
/**
* 日志配置
*/
return [
// app_log() 函数 请求和返回,都是用的这个配置
'file' => BASE_PATH . '/storage/log', // 日志存储位置
// debug 对应的配置
'debug_file' => BASE_PATH . '/storage/debug', // debug 日志存储位置
'test' => BASE_PATH . '/storage/test', // 测试
];
获取 log.php 中的某个值
config('log'); // 获取到 log.php 文件中的所有配置
config('log','file'); // 获取到 file 键对应的值