사용자가 이 방법을 사용하려면 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>
사용자가 이 방법을 사용하려면 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>
그냥 생성자에서 호출하면 안되나요
이 방법을 사용자에게 표시하지 않으려면 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
호출 시 실행할 로딩 프로세스를 전송