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


    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);
    }

  • 相关阅读:
    从C#下使用WM_COPYDATA传输数据说到Marshal的应用
    关于C#中实现两个应用程序消息通讯的问题
    内核模块/lib/modules/2.6.2426server/build: No such file or directory. Stop.
    关于BUILD_BUG_ON
    __user && address_space(1)
    Linux Namespaces机制——实现
    inetsw_array的定义中有四个元素IPPROTO_TCP,IPPROTO_UDP,IPPROTO_ICMP,IPPROTO_IP
    需求调研中有效沟通系列如何确认需求?
    ITSM & ITIL QQ群 2月28日讨论 ITIL中什么最重要和优先级最高的聊天记录和总结
    .NET平台下开发HelpDesk(服务台)的广泛应用前景分析
  • 原文地址:https://www.cnblogs.com/cjymuyang/p/9448421.html
Copyright © 2020-2023  润新知