框架原理之加配置加载类

Posted xiaobingch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架原理之加配置加载类相关的知识,希望对你有一定的参考价值。

目录结构:

技术图片

corelibconf.php

<?php

namespace corelib;


class conf
{
    static public $conf = [];
    static function get($name,$file) {
        /*
         * 1.判断配置文件是否存在
         * 2.判断配置项是否存在
         * 3.缓存配置
         */
        if(isset(self::$conf[$file])) {
            return self::$conf[$file][$name];
        } else {
            $path = MYFRAME.‘/core/config/‘.$file.‘.php‘;
            if(is_file($path)) {
                $conf = include $path;
                if(isset($conf[$name])) {
                    self::$conf[$file] = $conf;
                    return $conf[$name];
                } else {
                    throw new Exception(‘配置项不存在‘.$name);
                }
            } else {
                throw new Exception(‘配置文件不存在‘.$file);
            }
        }
    }

    static function all($file)
    {
        if(isset(self::$conf[$file])) {
            return self::$conf[$file];
        } else {
            $path = MYFRAME.‘/core/config/‘.$file.‘.php‘;
            if(is_file($path)) {
                $conf = include $path;
                self::$conf[$file] = $conf;
                return $conf;
            } else {
                throw new Exception(‘配置文件不存在‘.$file);
            }
        }
    }

}

 

数据库配置文件 coreconfigdatabase.php

<?php

return array(
    ‘DSN‘ => ‘mysql:host=localhost;dbname=test‘,
    ‘USERNAME‘ => ‘root‘,
    ‘PASSWD‘ => ‘root‘,
);

默认路由配置文件 coreconfig oute.php

<?php
return array(
    ‘CTRL‘=>‘Index‘,
    ‘ACTION‘=>‘index‘
);

加载数据库配置文件 corelibmodel.php

<?php

namespace corelib;
use corelibconf;

class model extends PDO
{
    public function __construct()
    {
        $dsn = conf::get("DSN",‘database‘);
        $username = conf::get("USERNAME",‘database‘);
        $passwd = conf::get("PASSWD",‘database‘);
        try {
            parent::__construct($dsn,$username,$passwd);

        } catch (Exception $e) {
            p($e->getMessage());
        }
    }

}

加载路由配置文件 corelibRoute.php

<?php

namespace corelib;
use corelibconf;

class Route
{
    public $controller;//控制器
    public $action;//方法
    function __construct()
    {
        /*
         * 1.隐藏index.php
         * 2.返回url参数部分
         * 3.返回控制器和方法
         */
        if (isset($_SERVER[‘REDIRECT_URL‘]) && $_SERVER[‘REDIRECT_URL‘] != ‘/‘) {
            $path = $_SERVER[‘REDIRECT_URL‘];
            $pathArr = explode(‘/‘,trim($path,‘/‘));
            if (isset($pathArr[0])) {
                $this->controller = $pathArr[0];
            }
            unset($pathArr[0]);
            if (isset($pathArr[1])) {
                $this->action = $pathArr[1];
                unset($pathArr[1]);
            }else{
                //从配置文件加载默认方法
                $this->action = conf::get(‘CTRL‘,‘route‘);
            }

            //url多余部分(参数)转为GET
            $count = count($pathArr)+2;
            $i = 2;
            while ($i < $count) {
                if (isset($pathArr[$i+1])) {
                    $_GET[$pathArr[$i]] = $pathArr[$i+1];
                }
                $i += 2;
            }

        } else {
            $this->controller = conf::get(‘CTRL‘,‘route‘);;//默认控制器
            $this->action = conf::get(‘ACTION‘,‘route‘);;//默认方法
        }


    }


}

以上是关于框架原理之加配置加载类的主要内容,如果未能解决你的问题,请参考以下文章

Android 插件化“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

Android 插件化“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )

ServletContainerInitializer加载机制

反射的原理

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段