???static $_mem ???????= ??array();
???if(is_float($end)) { // 记录时间
???????$_info[$start] ?= ??$end;
???}elseif(!empty($end)){ // 统计时间和内存使用
???????if(!isset($_info[$end])) $_info[$end] ??????= ?microtime(TRUE);
???????if(MEMORY_LIMIT_ON && $dec==‘m‘){
???????????if(!isset($_mem[$end])) $_mem[$end] ????= ?memory_get_usage();
???????????return number_format(($_mem[$end]-$_mem[$start])/1024);
???????}else{
???????????return number_format(($_info[$end]-$_info[$start]),$dec);
???????}
???}else{ // 记录时间和内存使用
???????$_info[$start] ?= ?microtime(TRUE);
???????if(MEMORY_LIMIT_ON) $_mem[$start] ??????????= ?memory_get_usage();
???}
}
???}
???$info ??= ??parse_url($template);
???$file ??= ??$info[‘host‘].(isset($info[‘path‘])?$info[‘path‘]:‘‘);
???$module = ??isset($info[‘user‘])?$info[‘user‘].‘/‘:MODULE_NAME.‘/‘;
???$extend = ??$info[‘scheme‘];
???$layer ?= ??$layer?$layer:C(‘DEFAULT_V_LAYER‘);
???// 获取当前主题的模版路径
???$auto ??= ??C(‘AUTOLOAD_NAMESPACE‘);
???if($auto && isset($auto[$extend])){ // 扩展资源
???????$baseUrl ???= ??$auto[$extend].$module.$layer.‘/‘;
???}elseif(C(‘VIEW_PATH‘)){ // 指定视图目录
???????$baseUrl ???= ??C(‘VIEW_PATH‘).$module.‘/‘;
???}else{
???????$baseUrl ???= ??APP_PATH.$module.$layer.‘/‘;
???}
???// 获取主题
???$theme ?= ??substr_count($file,‘/‘)<2 ? C(‘DEFAULT_THEME‘) : ‘‘;
???// 分析模板文件规则
???$depr ??= ??C(‘TMPL_FILE_DEPR‘);
???if(‘‘ == $file) {
???????// 如果模板文件名为空 按照默认规则定位
???????$file = CONTROLLER_NAME . $depr . ACTION_NAME;
???}elseif(false === strpos($file, ‘/‘)){
???????$file = CONTROLLER_NAME . $depr . $file;
???}elseif(‘/‘ != $depr){
???????if(substr_count($file,‘/‘)>1){
???????????$file ??= ??substr_replace($file,$depr,strrpos($file,‘/‘),1);
???????}else{
???????????$file ??= ??str_replace(‘/‘, $depr, $file);
???????}
???}
???return $baseUrl.($theme?$theme.‘/‘:‘‘).$file.C(‘TMPL_TEMPLATE_SUFFIX‘);
}
???if (!isset($_num[$key])) {
???????$_num[$key] = (false !== $save)? S(‘N_‘.$key) : ?0;
???}
???if (empty($step))
???????return $_num[$key];
???else
???????$_num[$key] = $_num[$key] + (int) $step;
???if(false !== $save){ // 保存结果
???????S(‘N_‘.$key,$_num[$key],$save);
???}
}
???if(strpos($name,‘:‘)) {
???????list($class,$name) ???= ?explode(‘:‘,$name);
???}else{
???????$class ?????= ??‘Think\\Model‘;
???}
???$guid ??????????= ??(is_array($connection)?implode(‘‘,$connection):$connection).$tablePrefix . $name . ‘_‘ . $class;
???if (!isset($_model[$guid]))
???????$_model[$guid] = new $class($name,$tablePrefix,$connection);
???return $_model[$guid];
}
???$action = ??$info[‘basename‘];
???$module = ??$info[‘dirname‘];
???$class ?= ??A($module,$layer);
???if($class){
???????if(is_string($vars)) {
???????????parse_str($vars,$vars);
???????}
???????return call_user_func_array(array(&$class,$action.C(‘ACTION_SUFFIX‘)),$vars);
???}else{
???????return false;
???}
}
???$url ???= ?!empty($info[‘path‘])?$info[‘path‘]:ACTION_NAME;
???if(isset($info[‘fragment‘])) { // 解析锚点
???????$anchor = ??$info[‘fragment‘];
???????if(false !== strpos($anchor,‘?‘)) { // 解析参数
???????????list($anchor,$info[‘query‘]) = explode(‘?‘,$anchor,2);
???????}
???????if(false !== strpos($anchor,‘@‘)) { // 解析域名
???????????list($anchor,$host) ???= ??explode(‘@‘,$anchor, 2);
???????}
???}elseif(false !== strpos($url,‘@‘)) { // 解析域名
???????list($url,$host) ???= ??explode(‘@‘,$info[‘path‘], 2);
???}
???// 解析子域名
???if(isset($host)) {
???????$domain = $host.(strpos($host,‘.‘)?‘‘:strstr($_SERVER[‘HTTP_HOST‘],‘.‘));
???}elseif($domain===true){
???????$domain = $_SERVER[‘HTTP_HOST‘];
???????if(C(‘APP_SUB_DOMAIN_DEPLOY‘) ) { // 开启子域名部署
???????????$domain = $domain==‘localhost‘?‘localhost‘:‘www‘.strstr($_SERVER[‘HTTP_HOST‘],‘.‘);
???????????// ‘子域名‘=>array(‘模块[/控制器]‘);
???????????foreach (C(‘APP_SUB_DOMAIN_RULES‘) as $key => $rule) {
???????????????$rule ??= ??is_array($rule)?$rule[0]:$rule;
???????????????if(false === strpos($key,‘*‘) && 0=== strpos($url,$rule)) {
???????????????????$domain = $key.strstr($domain,‘.‘); // 生成对应子域名
???????????????????$url ???= ?substr_replace($url,‘‘,0,strlen($rule));
???????????????????break;
???????????????}
???????????}
???????}
???}
???// 解析参数
???if(is_string($vars)) { // aaa=1&bbb=2 转换成数组
???????parse_str($vars,$vars);
???}elseif(!is_array($vars)){
???????$vars = array();
???}
???if(isset($info[‘query‘])) { // 解析地址里面参数 合并到vars
???????parse_str($info[‘query‘],$params);
???????$vars = array_merge($params,$vars);
???}
???// URL组装
???$depr ??????= ??C(‘URL_PATHINFO_DEPR‘);
???$urlCase ???= ??C(‘URL_CASE_INSENSITIVE‘);
???if($url) {
???????if(0=== strpos($url,‘/‘)) {// 定义路由
???????????$route ?????= ??true;
???????????$url ???????= ??substr($url,1);
???????????if(‘/‘ != $depr) {
???????????????$url ???= ??str_replace(‘/‘,$depr,$url);
???????????}
???????}else{
???????????if(‘/‘ != $depr) { // 安全替换
???????????????$url ???= ??str_replace(‘/‘,$depr,$url);
???????????}
???????????// 解析模块、控制器和操作
???????????$url ???????= ??trim($url,$depr);
???????????$path ??????= ??explode($depr,$url);
???????????$var ???????= ??array();
???????????$varModule ?????= ??C(‘VAR_MODULE‘);
???????????$varController ?= ??C(‘VAR_CONTROLLER‘);
???????????$varAction ?????= ??C(‘VAR_ACTION‘);
???????????$var[$varAction] ??????= ??!empty($path)?array_pop($path):ACTION_NAME;
???????????$var[$varController] ??= ??!empty($path)?array_pop($path):CONTROLLER_NAME;
???????????if($maps = C(‘URL_ACTION_MAP‘)) {
???????????????if(isset($maps[strtolower($var[$varController])])) {
???????????????????$maps ???= ??$maps[strtolower($var[$varController])];
???????????????????if($action = array_search(strtolower($var[$varAction]),$maps)){
???????????????????????$var[$varAction] = $action;
???????????????????}
???????????????}
???????????}
???????????if($maps = C(‘URL_CONTROLLER_MAP‘)) {
???????????????if($controller = array_search(strtolower($var[$varController]),$maps)){
???????????????????$var[$varController] = $controller;
???????????????}
???????????}
???????????if($urlCase) {
???????????????$var[$varController] ??= ??parse_name($var[$varController]);
???????????}
???????????$module = ??‘‘;
???????????if(!empty($path)) {
???????????????$var[$varModule] ???= ??array_pop($path);
???????????}else{
???????????????if(C(‘MULTI_MODULE‘)) {
???????????????????if(MODULE_NAME != C(‘DEFAULT_MODULE‘) || !C(‘MODULE_ALLOW_LIST‘)){
???????????????????????$var[$varModule]= ??MODULE_NAME;
???????????????????}
???????????????}
???????????}
???????????if($maps = C(‘URL_MODULE_MAP‘)) {
???????????????if($_module = array_search(strtolower($var[$varModule]),$maps)){
???????????????????$var[$varModule] = $_module;
???????????????}
???????????}
???????????if(isset($var[$varModule])){
???????????????$module = ??$var[$varModule];
???????????????unset($var[$varModule]);
???????????}
???????}
???}
???if(C(‘URL_MODEL‘) == 0) { // 普通模式URL转换
???????$url ???????= ??__APP__.‘?‘.C(‘VAR_MODULE‘)."={$module}&".http_build_query(array_reverse($var));
???????if($urlCase){
???????????$url ???= ??strtolower($url);
???????}
???????if(!empty($vars)) {
???????????$vars ??= ??http_build_query($vars);
???????????$url ??.= ??‘&‘.$vars;
???????}
???}else{ // PATHINFO模式或者兼容URL模式
???????if(isset($route)) {
???????????$url ???= ??__APP__.‘/‘.rtrim($url,$depr);
???????}else{
???????????$module = ??defined(‘BIND_MODULE‘) ? ‘‘ : $module;
???????????$url ???= ??__APP__.‘/‘.($module?$module.MODULE_PATHINFO_DEPR:‘‘).implode($depr,array_reverse($var));
???????}
???????if($urlCase){
???????????$url ???= ??strtolower($url);
???????}
???????if(!empty($vars)) { // 添加参数
???????????foreach ($vars as $var => $val){
???????????????if(‘‘ !== trim($val)) ??$url .= $depr . $var . $depr . urlencode($val);
???????????}
???????}
???????if($suffix) {
???????????$suffix ??= ?$suffix===true?C(‘URL_HTML_SUFFIX‘):$suffix;
???????????if($pos = strpos($suffix, ‘|‘)){
???????????????$suffix = substr($suffix, 0, $pos);
???????????}
???????????if($suffix && ‘/‘ != substr($url,-1)){
???????????????$url ?.= ?‘.‘.ltrim($suffix,‘.‘);
???????????}
???????}
???}
???if(isset($anchor)){
???????$url ?.= ‘#‘.$anchor;
???}
???if($domain) {
???????$url ??= ?(is_ssl()?‘https://‘:‘http://‘).$domain.$url;
???}
???return $url;
}
???if(is_array($options) && empty($cache)){
???????// 缓存操作的同时初始化
???????$type ??????= ??isset($options[‘type‘])?$options[‘type‘]:‘‘;
???????$cache ?????= ??Think\Cache::getInstance($type,$options);
???}elseif(is_array($name)) { // 缓存初始化
???????$type ??????= ??isset($name[‘type‘])?$name[‘type‘]:‘‘;
???????$cache ?????= ??Think\Cache::getInstance($type,$name);
???????return $cache;
???}elseif(empty($cache)) { // 自动初始化
???????$cache ?????= ??Think\Cache::getInstance();
???}
???if(‘‘=== $value){ // 获取缓存
???????return $cache->get($name);
???}elseif(is_null($value)) { // 删除缓存
???????return $cache->rm($name);
???}else { // 缓存数据
???????if(is_array($options)) {
???????????$expire ????= ??isset($options[‘expire‘])?$options[‘expire‘]:NULL;
???????}else{
???????????$expire ????= ??is_numeric($options)?$options:NULL;
???????}
???????return $cache->set($name, $value, $expire);
???}
}
}
ThinkPHP 3.2 大写字母函数封装方法实例
原文地址:https://www.cnblogs.com/ws1992/p/9154807.html