博客列表 >tp5开发手册阅读笔记 - Config.php详解

tp5开发手册阅读笔记 - Config.php详解

krasenChen的博客
krasenChen的博客原创
2017年07月31日 16:43:022285浏览
//框架类Config.php类配置文件.  2个私有属性和7个方法
/**
 *  配置类
 */
 class Config {
       coding;
 } 
 //2个静态私有属性变量
 //配置参数 初始值默认为空数组 提供内部访问:self::静态成员 参数只接受数组类型值
 private static $config = [];
 //配置参数作用域  提供内部访问:self::静态成员 参数只接受字符串类型的值
 private static $range = 'sys';
 
 //7个方法
 /**
  * 设定配置参数的作用域  公有静态方法 外部访问: Config::静态成员
  * @param string $range 参数作用域
  */
  public static function range($range) {
    //内部静态成员获取值
    self::$range = $range;
    if(!isset(self::$config[$range])) {
       self::$config[$range] = [];
    }  
  }
 
 
 /**
  * 解析配置文件或内容  公有静态方法 外部访问:
  * @param string $config   配置文件路径或内容
  * @param string $type   配置解析类型
  * @param string $name   配置名(如设置即表示二级配置)
  * @param string $range   作用域
  * @return mixed
  */
  public static function parse($config, $type='', $name='', $range='') {
      $range = $range ?: self::$range;
      if (empty($type)) {
          $type = pathinfo($config, PATHINFO_EXTENSION);
      }
      $class = false !==strpos($type, '\\') ? $type : '\\think\\config\\driver\\'.
      ucwords($type);
      return self::set((new $class())->parse($config), $name, $range);
  }
  
  
  /**
   *  加载配置文件(PHP格式)
   *  @param string    $file 配置文件名
   *  @param string    $name 配置名(如设置即表示二级配置)
   *  @param string    $range  作用域
   *  @return mixed
   */
  public static function load($file, $name='', $range='') {
      $range = $range ?: self::$range;
      if(!isset(self::$config[$range]))  {
          self::$config[$range] = [];
      }
      if(is_file($file)) {
          $name = strtolower($name);
          $type = pathinfo($file, PATHINFO_EXTENSION);
          if('php'== $type) {
              return self::set(include $file, $name, $range);
          }elseif ('yaml'==$type && function_exists('yaml_parse_file')) {
              return self::set(yaml_prase_file($file), $name, $range);
          }else {
              return self::parse($file, $type, $name, $range);
          }
      }else {
           return self::$config[$range];
          }  
  }
  
  
  /**
   *  检测配置是否存在
   *  @param  string   $name   配置参数名(支持二级配置 .号分割)
   *  @param  string   $range  作用域
   *  @return bool
   */
   public static function has($name, $range ='') {
       $range = $range ?: self::$range;
       if(!strpos($name, '.')) {
           return isset(self::$config[$range][strtolower($name)]);
       }else {
           //二维数组设置和获取支持
           $name = explode('.', $name, 2);
           return isset(self::$config[$range][strtolower($name[0])][$name[1]]);
       }   
   }
   
   
   /**
    *  获取配置参数 为空则获取所有配置
    *  @param  string  $name 配置参数名(支持二级配置 .号分割)
    *  @param  string  $range 作用域
    *  @return mixed
    */
  public static function get($name = null, $range = '')  {
      $range = $range ?: self::$range;
      //无参数是获取所有
      if(empty($name)  && isset(self::$config[$range]))  {
          return self::$config[$range];      
      }
      if(!strpost($name, '.')) {
          $name = strtolower($name);
          return isset(self::$config[$range][$name]) ? self::$config[$range][$name]: null;
      } else {
         //二维数组设置和获取支持
         $name = explode('.', $name, 2);
         $name[0] = strtolower($name[0]);
         return isset(self::$config[$range][$name[0]][$name[1]]) ? self::$config[$range][$name[0]][$name[1]] : null;
      } 
  }



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议