• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php 设计问题,我写了一个Config类,读取配置文件

php 搞代码 4年前 (2022-01-23) 48次浏览 已收录 0个评论
文章目录[隐藏]

我觉得把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     */    p<em style="color:transparent">本文来源gao.dai.ma.com搞@代*码#网</em><a>搞代gaodaima码</a>ublic 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调用时执行


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php 设计问题,我写了一个Config类,读取配置文件
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址