为了账号安全,请及时绑定邮箱和手机立即绑定

SWOOLE 从入门到放弃之写个小框架(九)

标签:
PHP

这个小框架代码放到码云上了,小伙伴们可以随便下载了 https://gitee.com/pizzzz/piz.git

该写Config了,没它不行啊。Config的功能简单,读取config目录下的配置文件。我希望能实现类似thinkphp的读取方法 ,可以读取多维数据。例如以下配置,读取方法是config('config.a.b.c').
config.php

<?php
return [
    'a'=>[
             'b'=>[
                    'c'=>'d',
              ],
     ],
]

创建frame/Lib/Config.php ,贴代码

<?php
namespace Piz;

class Config
{
    /**
     * 实例
     * @var object
     */
    private static $instance;
    /**
     * @var array
     */
    private static $config = [];

    private function __construct ()
    {
    }

    /**
     * 获取实例
     * @return \Piz\Config
     */
    public static function get_instance(){
        if(is_null (self::$instance)){
            self::$instance = new self();
        }
        return self::$instance;
    }

    /**
     * 获取配置参数
     * @param string $keys      参数名 格式:文件名.参数名1.参数名2....
     * @param null   $default   错误默认返回值
     *
     * @return mixed|null
     */
    public function get($keys  , $default = NULL){

        $keys   = array_filter ( explode('.', strtolower($keys)) );

        if(empty($keys))  return NULL;

        $file = array_shift ($keys);

        if(empty(self::$config[$file])){
            if(!is_file (CONFIG_PATH.$file.'.php')){
                return NULL;
            }
            self::$config[$file] = include CONFIG_PATH.$file.'.php';
        }

        $config = self::$config[$file] ;

        while($keys){
            $key = array_shift ($keys);
            if(!isset($config[$key])){
                $config = $default;
                break;
            }
            $config = $config[$key];
        }

        return $config;
    }
}

这个类的使用方法如下:

Config::get_instance()->get('config.a.b.c');

使用起来不是太方便,给它来一个更方便用的方法。
创建文件 frame/helper.php ,贴代码

<?php
/**
 * 助手函数
 */

/**
 * 获取实例
 * @param $class
 * @return mixed
 */
function get_instance($class){
    return ($class)::get_instance();
}
/**
 * 获取配置参数
 * @param      $name        参数名 格式:文件名.参数名
 * @param null $default     错误默认返回值
 *
 * @return mixed|null
 */
function config($name,$default = NULL){
    return get_instance('\Piz\Config')->get($name,$default);
}

这样就暴露出了两个方法

  1. get_instance() ,可以直接调用单例模式的实例。
    2.config() ,可以直接读取配置文件。

把下面的代码写入 frame/base.php

define ('CONFIG_PATH',dirname (__DIR__).'/config/');
require_once PIZ_PATH."helper.php";

创建配置文件 config/router.php并配置,

<?php
/**
 * 路由配置
 */

return [
    'm'             => 'index',     //默认模块
    'c'             => 'index',     //默认控制器
    'a'             => 'init',     //默认操作
    'ext'           => '.html',          //url后缀    例如 .html
    'rules'         =>  [           //自定义路由
        'user'  => 'uesr/index/init',
        'login' => 'index/login/init',
    ]
];

为了方便测试,修改下Router.php代码

public static function get_instance() {
        if( is_null(self::$instance) ) {
            self::$instance = new self();
            self::$config = Config::get_instance ()->get('router');
        }
        return self::$instance;
    }

测试一下config。修改frame/Lib/App.php代码

public function http($request,$response){
        $req = Request::get_instance ();
        $req->set($request);
        $router = Router::get_instance ()->http($req->server['request_uri']);
        $response->end(var_export (config('router.rules'),TRUE));
    }

测试运行
图片描述

小伙伴们,大家看图

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消