研究thinkphp很久了,总是感觉模不透thinkphp的编程思路及程序具体的运行方式,没办法,只能一步一步的跟踪,有时候会跟的头都痛了,可能是自己功力不够深厚的原因吧,不知道是程序员故意把程序弄的那么复杂,让别人摸不透还是咋的,总是会九转十八弯,今天在研究thinkphp的时候还碰到一个有“记忆功能”的自定义函数,也许是自己见识短,可能对于大侠来说已经是见怪不怪的了,
// 获取配置值 function C($name=null, $value=null) { static $_config = array(); if (empty($name)) return $_config; // 优先执行设置获取或赋值 keheng 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; // 避免非法参数 }
在think.class.php里面会有个引用函数
C(require THINK_PATH.'Conf/convention.php');
而convention.php里的内容确是以这样的一种形式存在。
if (!defined('KEHENG_PATH')) exit(); return array( /* 项目设定 */ 'APP_STATUS' => 'debug', // 应用调试模式状态 调试模式开启后有效 默认为debug 可扩展 并自动加载对应的配置文件 'APP_FILE_CASE' => false, // 是否检查文件的大小写 对Windows平台有效 'APP_FILE_CASE1' => 'NND,到底是怎么回事', 'APP_AUTOLOAD_PATH' => '',// 自动加载机制的自动搜索路径,注意搜索顺序 'APP_TAGS_ON' => true, // 系统标签扩展开关 'APP_TAGS_ON1' => '------------------------------就是这里了', // 系统标签扩展开关 'APP_SUB_DOMAIN_DEPLOY' => false, // 是否开启子域名部署 'APP_SUB_DOMAIN_RULES' => array(), // 子域名部署规则 'APP_SUB_DOMAIN_DENY' => array(), // 子域名禁用列表 'APP_GROUP_LIST' => '', // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin' }
在运行到这里的时候,C函数的$name值为Array(),反回出来return $_config;
只有这样后后面的C('APP_FILE_CASE')才会取到值,第一次见到这样的用法,感觉有些奇怪。