好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ThinkPHP 的 C 函数实现原理 - Thinkphp

ThinkPHP 的 C 函数实现原理

问题:ThinkPHP的C函数用于获取配置参数,我想知道它是如何获取配置文件里的参数的?

function  C( $name =null, $value =null)  {  static   $_config  =  array ();  // 无参数时获取所有   if ( empty empty ( $name ))  return   $_config ;  // 优先执行设置获取或赋值   if  ( is_string ( $name ))  {  if  (! strpos ( $name , '.' )) {  $name  =  strtolower ( $name );  if  ( is_null ( $value ))  return  isset( $_config [ $name ])?  $_config [ $name ] : null;  $_config [ $name ] =  $value ;  return ;  }  // 二维数组设置和获取支持   $name  =  explode ( '.' , $name );  $name [0] =  strtolower ( $name [0]);  if  ( is_null ( $value ))  return  isset( $_config [ $name [0]][ $name [1]]) ?  $_config [ $name [0]][ $name [1]] : null;  $_config [ $name [0]][ $name [1]] =  $value ;  return ;  }  // 批量设置   if ( is_array ( $name ))  return   $_config  =  array_merge ( $_config , array_change_key_case ( $name ));  return  null; // 避免非法参数   }  以下是部分参数  return   array (      'APP_DEBUG'  = > false,  // 是否开启调试模式   'APP_DOMAIN_DEPLOY'  = > false,  // 是否使用独立域名部署项目   'APP_PLUGIN_ON'  = > false,  // 是否开启插件机制   'APP_FILE_CASE'  = > false,  // 是否检查文件的大小写 对Windows平台有效   'APP_GROUP_DEPR'  = >  '.' ,  // 模块分组之间的分割符   'APP_GROUP_LIST'  = >  '' ,  // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'   'APP_AUTOLOAD_REG'  = > false,  // 是否开启SPL_AUTOLOAD_REGISTER   'APP_AUTOLOAD_PATH'  = >  'Think.Util.' , // __autoLoad 机制额外检测路径设置,注意搜索顺序   'APP_CONFIG_LIST'  = >  array ( 'taglibs' , 'routes' , 'tags' , 'htmls' , 'modules' , 'actions' ), // 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(htmls)静态缓存定义, modules(扩展模块),actions(扩展操作)   ) 

答:这个实际上不是ThinkPHP的问题域,是PHP的基础知识.

1.如下面是配置文件config.php.直接返回一个配置项数组.

return   array (      'APP_DEBUG'  = > false,  // 是否开启调试模式   'APP_DOMAIN_DEPLOY'  = > false,  // 是否使用独立域名部署项目   'APP_PLUGIN_ON'  = > false,  // 是否开启插件机制   'APP_FILE_CASE'  = > false,  // 是否检查文件的大小写 对Windows平台有效   'APP_GROUP_DEPR'  = >  '.' ,  // 模块分组之间的分割符   'APP_GROUP_LIST'  = >  '' ,  // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'   'APP_AUTOLOAD_REG'  = > false,  // 是否开启SPL_AUTOLOAD_REGISTER   'APP_AUTOLOAD_PATH'  = >  'Think.Util.' , // __autoLoad 机制额外检测路径设置,注意搜索顺序   'APP_CONFIG_LIST'  = >  array ( 'taglibs' , 'routes' , 'tags' , 'htmls' , 'modules' , 'actions' ), // 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(htmls)静态缓存定义, modules(扩展模块),actions(扩展操作)   ) 

2. 然后通过 $config = require("config.php"); 就可以获取配置数组,就那么简单!

关于require,顾名思义,就是用来包含文件的,相应的还有include,以及两个带once的,通常情况下,包含成功返回1,包含失败返回false,但是,如果被包含文件中用return返回,那么这个值就是return的值.

查看更多关于ThinkPHP 的 C 函数实现原理 - Thinkphp的详细内容...

  阅读:109次