自定义的C方法(仿照TP框架C方法),支持无限级调用
2018-01-17 10:29
399 查看
核心方法
/** * 获取配置、设置配置 * C('A.A') * @param string $conf_key * @param string $value * @return array|string */ function C( $conf_key ='' , $conf_value = '' ){ static $conf; // 初始化 if( is_array( $conf_key ) && empty($conf) ){ $conf = $conf_key; return $conf; } // 如果第二个参数为空代表获取配置项 C('MYSQL.host') if( empty( $conf_value ) && !empty( $conf_key ) ){ # 转大写防止出现错误 $conf_key = strtoupper( $conf_key ); //分割参数中的 . $conf_key_arr = array_filter(explode( '.' , $conf_key )); //防止静态变量被覆盖 $old = $conf; //根据.获取的对应的配置项 foreach( $conf_key_arr as $key => $value ){ if( isset( $old[$value] ) ){ $old = $old[$value]; }else{ return ; } } //返回要获取的配置的值 return $old; } # 如果两个参数都有,表示是设置配置项 if( !empty( $conf_value ) && !empty( $conf_key ) ){ # 转大写防止出现错误 $conf_key = strtoupper( $conf_key ); //分割参数中的 . $conf_key_arr = explode( '.' , $conf_key ); //递归设置配置 $conf = setKeyValue( $conf , $conf_key_arr , $conf_value ); return $conf_value; } return $conf; } /** * 设置配置项【递归】 */ function setKeyValue( &$data , $key_arr , $data_value ){ // echo '<hr/>'; //如果key_arr长度等于1 直接复制 if( count( $key_arr ) == 1 ){ $data[array_shift($key_arr)] = $data_value; }else{ //每次弹出一个元素,并且把新的data传递进去 setKeyValue( $data[array_shift($key_arr)] , $key_arr , $data_value); } return $data; }
配置文件配置:
return [ 'MYSQL' => [ 'HOST' => 'localhost', 'USER' => 'root', 'PWD' => '', 'DB' => 'index', 'CHARSET' => 'utf-8', 'aaaa'=>[ 'b'=>122, 'c' => [ 'aaa'=>121, 'bbb'=>2 ] ] ] ];
相关文章推荐
- tp 框架 利用反射实现对象调用方法
- Dwr框架在客户端远程调用方法返回自定义类型的例子
- thinkphp(tp)框架封装一个自己写的方法到类里面.可以在其他控制器里面调用
- 让dedecms搜索页面支持标签调用及自定义字段调用的方法
- Javscript调用iframe框架页面中函数的方法
- 怎样从0开始搭建一个测试框架_11——支持方法
- TP框架中D方法与M方法的区别
- CI 框架 hooks 的调用方法
- 求助:如何使用VS的Profiler跟踪框架内部的方法调用?
- Java webservice 调用自定义dll(有其他依赖)方法全解,无需设置环境变量
- ListView刷新:自定义adapter 调用notifyDatasetChanged()方法不起作用 的解决方案
- Java-RMI-框架(远程方法调用)
- 自定义复选框、单选按钮外观方法。支持IE、Firefox、chrome
- 自定义字段在各个模块的调用方法
- java web框架中service层调用本service层方法,方法不自动提交
- Android-本地方法与Java相互调用-自定义ProgressBar(锅炉压力监测例子)/NDK-JNI开发实例(七)
- 自定义TextView——解决ViewGroup不调用OnDraw方法
- ava的动态性支持学习七 - 方法句柄调用的性能对比
- Java RMI 框架(远程方法调用)
- CI框架扩展路由钩子hooks改变自定义控制器和方法