我觉得把loadConfigFiles放在Config类中不太好,这样用户就会使用这个方法,但是我得实现配置文件的加载,怎么把类内部的$items实现填满吗?
<code><?php /** * User: 火蜥蜴制作 * Date: 2016/8/27 * Time: 8:19 * 配置类 */ namespace Core; class Config { // All of the configuration items. private static $items = []; private static $isLoaded = false; /** * 获取配置 * @param $key 如"database.dbname" * @param null $default * @return mixed */ public static function get($key, $default = null) { $params = array_filter(explode('.', $key)); $prefix = $params[0]; $key = $params[1]; if(array_key_exists($key, self::$items[$prefix])) { return self::$items[$prefix][$key]; } else { return $default; } } /** * 设置配置 * @param $key * @param $value */ public function set($key, $value) { $params = array_filter(explode('.', $key)); $prefix = $params[0]; $key = $params[1]; self::$items[$prefix][$key] = $value; } /** * 加载所有配置文件 */ public static function loadConfigFiles() { if(!self::$isLoaded) { $pattern = __DIR__ . "/../config/*.php"; $files = glob($pattern); foreach ($files as $file) { $prefix = basename($file, ".php"); self::$items[$prefix] = require($file); } self::$isLoaded = true; } } } </code></code>
我觉得把loadConfigFiles放在Config类中不太好,这样用户就会使用这个方法,但是我得实现配置文件的加载,怎么把类内部的$items实现填满吗?
<code><?php /** * User: 火蜥蜴制作 * Date: 2016/8/27 * Time: 8:19 * 配置类 */ namespace Core; class Config { // All of the configuration items. private static $items = []; private static $isLoaded = false; /** * 获取配置 * @param $key 如"database.dbname" * @param null $default * @return mixed */ public static function get($key, $default = null) { $params = array_filter(explode('.', $key)); $prefix = $params[0]; $key = $params[1]; if(array_key_exists($key, self::$items[$prefix])) { return self::$items[$prefix][$key]; } else { return $default; } } /** * 设置配置 * @param $key * @param $value */ public function set($key, $value) { $params = array_filter(explode('.', $key)); $prefix = $params[0]; $key = $params[1]; self::$items[$prefix][$key] = $value; } /** * 加载所有配置文件 */ public static function loadConfigFiles() { if(!self::$isLoaded) { $pattern = __DIR__ . "/../config/*.php"; $files = glob($pattern); foreach ($files as $file) { $prefix = basename($file, ".php"); self::$items[$prefix] = require($file); } self::$isLoaded = true; } } } </code></code>
构造方法里调用不就可以了
如果实在不想让使用者看到这个方法的话,我觉得可以变为private
然后在将get
方法变为:
<code class="php">public static function get($key, $default = null) { $params = array_filter(explode('.', $key)); $prefix = $params[0]; $key = $params[1]; if(array_key_exists($key, self::$items[$prefix])) { return self::$items[$prefix][$key]; } else if (self::$isLoaded) { return $default; } else { self::loadConfigFiles(); } } </code>
把加载的过程转移给第一次get
调用时执行