zoukankan      html  css  js  c++  java
  • TP框架中的多种方法代码(C,G,L,T,I,N,D,M,A,R,B,U,W,S,F,E)

    C方法

    function C($name=null, $value=null,$default=null) {
        static $_config = array();
        // 无参数时获取所有
        if (empty($name)) {
            return $_config;
        }
        // 优先执行设置获取或赋值
        if (is_string($name)) {
            if (!strpos($name, '.')) {
                $name = strtolower($name);
                if (is_null($value))
                    return isset($_config[$name]) ? $_config[$name] : $default;
                $_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]] : $default;
            $_config[$name[0]][$name[1]] = $value;
            return;
        }
        // 批量设置
        if (is_array($name)){
            $_config = array_merge($_config, array_change_key_case($name));
            return;
        }
        return null; // 避免非法参数
    }

    G方法

    function G($start,$end='',$dec=4) {
        static $_info       =   array();
        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();
        }
    }

    L方法

    function L($name=null, $value=null) {
        static $_lang = array();
        // 空参数返回所有定义
        if (empty($name))
            return $_lang;
        // 判断语言获取(或设置)
        // 若不存在,直接返回全大写$name
        if (is_string($name)) {
            $name = strtoupper($name);
            if (is_null($value))
                return isset($_lang[$name]) ? $_lang[$name] : $name;
            $_lang[$name] = $value; // 语言定义
            return;
        }
        // 批量定义
        if (is_array($name))
            $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));
        return;
    }

    T方法

    function T($template='',$layer=''){
    
        // 解析模版资源地址
        if(false === strpos($template,'://')){
            $template   =   'http://'.str_replace(':', '/',$template);
        }
        $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');
    }

    I方法

    function I($name,$default='',$filter=null) {
        if(strpos($name,'.')) { // 指定参数来源
            list($method,$name) =   explode('.',$name,2);
        }else{ // 默认为自动判断
            $method =   'param';
        }
        switch(strtolower($method)) {
            case 'get'     :   $input =& $_GET;break;
            case 'post'    :   $input =& $_POST;break;
            case 'put'     :   parse_str(file_get_contents('php://input'), $input);break;
            case 'param'   :
                switch($_SERVER['REQUEST_METHOD']) {
                    case 'POST':
                        $input  =  $_POST;
                        break;
                    case 'PUT':
                        parse_str(file_get_contents('php://input'), $input);
                        break;
                    default:
                        $input  =  $_GET;
                }
                break;
            case 'request' :   $input =& $_REQUEST;   break;
            case 'session' :   $input =& $_SESSION;   break;
            case 'cookie'  :   $input =& $_COOKIE;    break;
            case 'server'  :   $input =& $_SERVER;    break;
            case 'globals' :   $input =& $GLOBALS;    break;
            default:
                return NULL;
        }
        if(empty($name)) { // 获取全部变量
            $data       =   $input;
            array_walk_recursive($data,'filter_exp');
            $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
            if($filters) {
                $filters    =   explode(',',$filters);
                foreach($filters as $filter){
                    $data   =   array_map_recursive($filter,$data); // 参数过滤
                }
            }
        }elseif(isset($input[$name])) { // 取值操作
            $data       =   $input[$name];
            is_array($data) && array_walk_recursive($data,'filter_exp');
            $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
            if($filters) {
                $filters    =   explode(',',$filters);
                foreach($filters as $filter){
                    if(function_exists($filter)) {
                        $data   =   is_array($data)?array_map_recursive($filter,$data):$filter($data); // 参数过滤
                    }else{
                        $data   =   filter_var($data,is_int($filter)?$filter:filter_id($filter));
                        if(false === $data) {
                            return   isset($default)?$default:NULL;
                        }
                    }
                }
            }
        }else{ // 变量默认值
            $data       =    isset($default)?$default:NULL;
        }
        return $data;
    }
    
    function array_map_recursive($filter, $data) {
         $result = array();
         foreach ($data as $key => $val) {
             $result[$key] = is_array($val)
                 ? array_map_recursive($filter, $val)
                 : call_user_func($filter, $val);
         }
         return $result;
     }

    N方法

    function N($key, $step=0,$save=false) {
        static $_num    = array();
        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);
        }
    }

    D方法

    function D($name='',$layer='') {
        if(empty($name)) return new ThinkModel;
        static $_model  =   array();
        $layer          =   $layer? $layer : C('DEFAULT_M_LAYER');
        if(isset($_model[$name.$layer]))
            return $_model[$name.$layer];
        $class          =   parse_res_name($name,$layer);
        if(class_exists($class)) {
            $model      =   new $class(basename($name));
        }elseif(false === strpos($name,'/')){
            // 自动加载公共模块下面的模型
            $class      =   '\Common\'.$layer.'\'.$name.$layer;
            $model      =   class_exists($class)? new $class($name) : new ThinkModel($name);
        }else {
            ThinkLog::record('D方法实例化没找到模型类'.$class,ThinkLog::NOTICE);
            $model      =   new ThinkModel(basename($name));
        }
        $_model[$name.$layer]  =  $model;
        return $model;
    }

    M方法

    function M($name='', $tablePrefix='',$connection='') {
        static $_model  = array();
        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];
    }

    A方法

    function A($name,$layer='',$level='') {
        static $_action = array();
        $layer  =   $layer? $layer : C('DEFAULT_C_LAYER');
        $level  =   $level? $level : ($layer == C('DEFAULT_C_LAYER')?C('CONTROLLER_LEVEL'):1);
        if(isset($_action[$name.$layer]))
            return $_action[$name.$layer];
        $class  =   parse_res_name($name,$layer,$level);
        if(class_exists($class)) {
            $action             =   new $class();
            $_action[$name.$layer]     =   $action;
            return $action;
        }else {
            return false;
        }
    }

    R方法

    function R($url,$vars=array(),$layer='') {
        $info   =   pathinfo($url);
        $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;
        }
    }

    B方法

    function B($name, &$params=NULL) {
        if(strpos($name,'/')){
            list($name,$tag) = explode('/',$name);
        }else{
            $tag     =   'run';
        }
        return ThinkHook::exec($name,$tag,$params);
    }

    U方法

    function U($url='',$vars='',$suffix=true,$domain=false) {
        // 解析URL
        $info   =  parse_url($url);
        $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;
    }

    w方法

    function W($name, $data=array()) {
        return R($name,$data,'Widget');
    }

    S方法

    function S($name,$value='',$options=null) {
        static $cache   =   '';
        if(is_array($options) && empty($cache)){
            // 缓存操作的同时初始化
            $type       =   isset($options['type'])?$options['type']:'';
            $cache      =   ThinkCache::getInstance($type,$options);
        }elseif(is_array($name)) { // 缓存初始化
            $type       =   isset($name['type'])?$name['type']:'';
            $cache      =   ThinkCache::getInstance($type,$name);
            return $cache;
        }elseif(empty($cache)) { // 自动初始化
            $cache      =   ThinkCache::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);
        }
    }

    F方法

    function F($name, $value='', $path=DATA_PATH) {
        static $_cache  =   array();
        $filename       =   $path . $name . '.php';
        if ('' !== $value) {
            if (is_null($value)) {
                // 删除缓存
                if(false !== strpos($name,'*')){
                    return false; // TODO 
                }else{
                    unset($_cache[$name]);
                    return ThinkStorage::unlink($filename,'F');
                }
            } else {
                ThinkStorage::put($filename,serialize($value),'F');
                // 缓存数据
                $_cache[$name]  =   $value;
                return ;
            }
        }
        // 获取缓存数据
        if (isset($_cache[$name]))
            return $_cache[$name];
        if (ThinkStorage::has($filename,'F')){
            $value      =   unserialize(ThinkStorage::read($filename,'F'));
            $_cache[$name]  =   $value;
        } else {
            $value          =   false;
        }
        return $value;
    }

    E方法

    function E($msg, $code=0) {
        throw new ThinkException($msg, $code);
    }
  • 相关阅读:
    数组作为函数参数传递时
    Tree 笨方法实现
    双向链表
    带头节点的循环链表及两个循环链表的合并
    josephus问题->不带头节点的循环链表
    数组形式链表
    检测qq是否在线
    Python-requests模块
    Python面向对象练习——基于面向对象设计一个对战游戏
    Python-面向对象
  • 原文地址:https://www.cnblogs.com/liucaodan/p/7131073.html
Copyright © 2011-2022 走看看