The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 配置索引 ]

DoYouHaoBaby提供了灵活的全局配置功能,框架将配置存在文件中,支持惯例配置、项目配置和模块配置,并且会自
动生成配置缓存文件,无需重复解析的开销。对于有些简单的应用,你无需配置任何配置文件,而对于复杂的要求,
你还可以增加模块配置文件,另外DoYouHaoBaby的动态配置使得你在开发过程中可以灵活的动态调整配置参数。

DoYouHaoBaby在项目配置还编写了分层配置模式,其配置层次体现在:

惯例配置 项目配置 分组配置 模块配置 操作配置

以上是配置文件的加载顺序,但是因为后面的配置会覆盖之前的配置(在没有生效的前提下),所以优先顺序从右到
左。

DoYouHaoBaby 的有框架中G::C()来完成解析,并且框架初始化一个惯性配置。

  1. static public function C( $sName='',$Value='**back_the_config_data**' , $sKey ='',$bForce = false,   
  2.   
  3. $bKeyDelete=false ){   
  4.   
  5.          //创建的一个配置实例   
  6.          static $oConfig=null;   
  7.   
  8.          // 创建对象,并且初始化数据   
  9.          if( empty( $oConfig ) ){   
  10.   
  11.               // 创建配置缓存目录   
  12.               if ( !is_dir( APP_DATA_PATH.'/~Config' ) ){   
  13.   
  14.                   self::makeDir( APP_DATA_PATH.'/~Config' );   
  15.               }   
  16.   
  17.               // 实例化项目配置对象   
  18.               $oConfig =new Config( APP_DATA_PATH.'/~Config' );   
  19.          }   
  20.   
  21.          // ''时返回配置数据   
  22.          if( !empty($sName) && $Value ==='**back_the_config_data**' ){   
  23.   
  24.               if (!strpos($sName,'.')) {   
  25.   
  26.                    return  $oConfig->getItem( $sKey ,$sName );   
  27.               }   
  28.   
  29.               // 多维数组获取   
  30.               $arrName = explode('.',$sName );   
  31.               $arrConfigValue = $oConfig->getItems( $sKey );   
  32.               $sString = '$arrConfigValue'.E::arrayHandler( $arrName,1,0 );   
  33.               $sString = "\$sName = isset( {$sString} ) ? {$sString} : null;";   
  34.               return  eval( $sString );   
  35.          }   
  36.   
  37.          // $sName='' 返回所有配置值   
  38.          if( $sName ==='' && $Value!==null ){   
  39.   
  40.              return  $oConfig->getItems( $sKey );   
  41.          }   
  42.   
  43.          // 如果$sName=null && $Value =null,那么是操作键值   
  44.          if(  $sName===null and $Value===null  ){   
  45.   
  46.              // 删除所有子键   
  47.              if( $sKey===null ){   
  48.   
  49.                  return $oConfig->cleanChildKeys();   
  50.              }   
  51.   
  52.              // 返回所有子键   
  53.              elseif( $sKey=='*' ){   
  54.   
  55.                  return $oConfig->getChildKeys();   
  56.              }   
  57.   
  58.              // $sKey=='',返回顶层子键或者指定子键   
  59.              else{   
  60.   
  61.                  if( $bKeyDelete===false ){   
  62.   
  63.                      return $oConfig->getKey( $sKey );   
  64.                  }   
  65.   
  66.                  else{   
  67.   
  68.                      return $oConfig->deleteKey( $sKey );   
  69.                  }   
  70.              }   
  71.   
  72.          }   
  73.   
  74.          // $sName =null 删除所有配置值   
  75.          if( $sName ===null ){   
  76.   
  77.              return  $oConfig->cleanItems( $sKey );   
  78.          }   
  79.   
  80.          // $Value=null时删除配置数据   
  81.          if( is_null( $Value ) ){   
  82.   
  83.              $oConfig->deleteItem( $sKey ,$sName );   
  84.          }   
  85.   
  86.          // 如果都不是,那么就是设置配置值   
  87.          // 如果是*,那么我们设置最顶层的配置数据   
  88.          if( is_array( $sName ) ){   
  89.   
  90.               foreach( $sName as $sK =>$v ){   
  91.   
  92.                    if( !( $bForce===false && $oConfig->hasItem( $sKey, $sK ) )||   
  93.   
  94. $oConfig->getItem( $sKey ,$sName )!==$Value ){   
  95.   
  96.                         $oConfig->setItem( $sKey, $sK,$v );   
  97.                    }   
  98.               }   
  99.               return;   
  100.           }   
  101.   
  102.           else{   
  103.   
  104.               if( !( $bForce===false && $oConfig->hasItem( $sKey, $sName ) )||$oConfig-   
  105.   
  106. >getItem( $sKey ,$sName )!==$Value ){   
  107.   
  108.                    if (!strpos($sName,'.')) {   
  109.   
  110.                        return  $oConfig->setItem( $sKey, $sName,$Value );   
  111.                    }   
  112.   
  113.                    // 多维数组设置   
  114.                    $arrName = explode('.',$sName );   
  115.                    $sString = '$arrConfigValue'.E::arrayHandler( $arrName,1,0 );   
  116.                    $sString = "{$sString} ='{$Value}';";   
  117.                    eval( $sString );   
  118.   
  119.                    return  $oConfig->setItem( $sKey, $sName,$arrConfigValue );   
  120.               }   
  121.           }   
  122.   
  123.  }   

通常一个项目有一个默认配置就足够了,如果你需要更多配置,你可以仿照C函数中进行编写新的配置对象。