diff --git a/library/think/config.php b/library/think/config.php index 092d9478..16ae684f 100644 --- a/library/think/config.php +++ b/library/think/config.php @@ -11,6 +11,9 @@ namespace think; +use think\config\driver\DriverInterface; +use think\config\driver\Ini; + class Config { // 配置参数 @@ -27,15 +30,21 @@ class Config } } - // 解析其他格式的配置参数 - public static function parse($config, $type = '', $range = '') + /** + * 解析配置文件或内容 + * + * @param string $config 配置文件路径或内容 + * @param string $range 作用域 + * @param DriverInterface|null $driver 配置解析驱动 + */ + public static function parse($config, $range = '', DriverInterface $driver = null) { - if (empty($type)) { - $type = substr(strrchr($config, '.'), 1); + if ($driver === null) { + $driver = new Ini(); } + $range = $range ? $range : self::$range; - $class = '\\think\\config\\driver\\' . strtolower($type); - self::set((new $class())->parse($config), '', $range); + self::set($driver->parse($config), '', $range); } // 加载配置文件 diff --git a/library/think/config/driver/DriverInterface.php b/library/think/config/driver/DriverInterface.php new file mode 100644 index 00000000..1147ee82 --- /dev/null +++ b/library/think/config/driver/DriverInterface.php @@ -0,0 +1,29 @@ + +// +---------------------------------------------------------------------- + +namespace think\config\driver; + +/** + * 配置文件解析驱动接口 + * + * @package think\config\driver + */ +interface DriverInterface +{ + /** + * 解析配置文件或内容,并以字符串形式返回 + * + * @param string $config 配置文件路径或字符串 + * + * @return array 以数组形式返回配置 + */ + public function parse($config); +} diff --git a/library/think/config/driver/ini.php b/library/think/config/driver/ini.php index 44324dee..f5caf6d3 100644 --- a/library/think/config/driver/ini.php +++ b/library/think/config/driver/ini.php @@ -11,7 +11,7 @@ namespace think\config\driver; -class Ini +class Ini implements DriverInterface { public function parse($config) { diff --git a/library/think/config/driver/xml.php b/library/think/config/driver/xml.php index a0ad8402..9c060b18 100644 --- a/library/think/config/driver/xml.php +++ b/library/think/config/driver/xml.php @@ -11,7 +11,7 @@ namespace think\config\driver; -class Xml +class Xml implements DriverInterface { public function parse($config) {