获取配置文件方式
Config::get('db.user.port');
Config::get('db.user.password');
常见配置文件格式
php开发中有ini 、php 后缀为名的配置文件。
ini 是 laravel 常用的配置 。
ini解析方式
parse_ini_file($iniFilePath,true) //得到数组
实现方式
通过解析 get 方法中 参数
1、去除两边多余的.
2、以.分割,共计分成2部分 第一部分是 文件名称 第二部分是数组中获取配置文件的item
3、通过分割后的item去查找配置项
4、如果配置文件没有传递任何值,则返回null
PS:主要实现方式 是 通过第一个参数 获取到配置文件 第二步骤 是通过 foreach 去查找对应的item、其中只要是有一项没有,就返回null
代码实现
class Config
{
const CONFIG_FILE_EXT = '.php';
private static $configFileName;
private static $configEnvFilePath;
private static $configGlobalFilePath;
private static $configItemName;
public static function get(string $configName = 'Global')
{
$configName = trim($configName, '.');
if (empty($configName)) {
return null;
}
$configName = explode('.', $configName, 2);
self::$configFileName = empty($configName[0]) ? null : $configName[0];
self::$configItemName = empty($configName[1]) ? null : $configName[1];
return self::getConfig();
}
private static function getConfig()
{
self::$configGlobalFilePath = CONFIG_DIR . self::$configFileName . self::CONFIG_FILE_EXT;
self::$configEnvFilePath = CONFIG_DIR . ucfirst(RUNTIME_ENVIRONMENT) . DS . self::$configFileName
. self::CONFIG_FILE_EXT;
if (! is_file(self::$configGlobalFilePath) && ! is_file(self::$configEnvFilePath)) {
return null;
}
if (empty(self::$configItemName)) {
$config = self::getAllConfigItems();
} else {
$config = self::getConfigItem();
}
return $config;
}
private static function getAllConfigItems()
{
$globalConfig = $envConfig = [];
if (is_file(self::$configGlobalFilePath)) {
$globalConfig = require self::$configGlobalFilePath;
}
if (is_file(self::$configEnvFilePath)) {
$envConfig = require self::$configEnvFilePath;
}
return array_merge($globalConfig, $envConfig);
}
private static function getConfigItem()
{
if (empty(self::$configItemName)) {
return null;
}
$allConfig = self::getAllConfigItems();
$keys = explode('.', self::$configItemName);
$tmpConfig = $allConfig;
foreach ($keys as $key) {
if (empty($tmpConfig[$key])) {
$tmpConfig = null;
break;
}
$tmpConfig = $tmpConfig[$key];
}
return $tmpConfig;
}
private function __construct()
{
}
}调用方式
Config::get('db.username'); //获取configs目录下 db文件中的 username
Config::get('db.password'); //获取db中的密码