亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

thinkphp核心源碼注釋|Taglib.class.php

2024-05-05 00:04:38
字體:
來源:轉載
供稿:網友
thinkphp核心源碼注釋|Taglib.class.php
  1. <?php 
  2. // +---------------------------------------------------------------------- 
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] 
  4. // +---------------------------------------------------------------------- 
  5. // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved. 
  6. // +---------------------------------------------------------------------- 
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 
  8. // +---------------------------------------------------------------------- 
  9. // | Author: liu21st <liu21st@gmail.com> 
  10. // +---------------------------------------------------------------------- 
  11. namespace Think/Template; 
  12. /** 
  13.  * ThinkPHP標簽庫TagLib解析基類 
  14.  * 這個基礎類,好像是跟那個差不多呢 
  15.  */ 
  16. class TagLib { 
  17.   
  18.     /** 
  19.      * 標簽庫定義XML文件 
  20.      * @var string 
  21.      * @access protected 
  22.      */ 
  23.     protected $xml      = ''// 保存的文件 
  24.     protected $tags     = array();// 標簽定義 
  25.     /** 
  26.      * 標簽庫名稱 
  27.      * @var string 
  28.      * @access protected 
  29.      */ 
  30.     protected $tagLib   ='';// 標簽庫名稱 
  31.   
  32.     /** 
  33.      * 標簽庫標簽列表 
  34.      * @var string 
  35.      * @access protected 
  36.      */ 
  37.     protected $tagList  = array(); 
  38.   
  39.     /** 
  40.      * 標簽庫分析數組 
  41.      * @var string 
  42.      * @access protected 
  43.      */ 
  44.     protected $parse    = array(); 
  45.   
  46.     /** 
  47.      * 標簽庫是否有效 
  48.      * @var string 
  49.      * @access protected 
  50.      */ 
  51.     protected $valid    = false; 
  52.   
  53.     /** 
  54.      * 當前模板對象 
  55.      * @var object 
  56.      * @access protected 
  57.      */ 
  58.     protected $tpl
  59.   
  60.     protected $comparison = array(' nheq '=>' !== ',' heq '=>' === ',' neq '=>' != ',' eq '=>' == ',' egt '=>' >= ',' gt '=>' > ',' elt '=>' <= ',' lt '=>' < '); 
  61.     // 對標簽的一定 處理,標簽 很重要 
  62.     /** 
  63.      * 架構函數 
  64.      * @access public 
  65.      */ 
  66.     public function __construct() { 
  67.         $this->tagLib  = strtolower(substr(get_class($this),6));// 如果這樣寫的話,對于基類 一點意義也沒有呢 
  68.         // substr get_class($this) TagLib 
  69.         $this->tpl     = /Think/Think::instance('Think//Template'); // 實例化模版了 
  70.     }// 初始化了 這里的  taglib 其實是沒什么的了 , 
  71.     // tpl 就是個 new 一下 Think/Template 了 
  72.   
  73.     /** 
  74.      * TagLib標簽屬性分析 返回標簽屬性數組 
  75.      * @access public 
  76.      * @param string $tagStr 標簽內容 
  77.      * @return array 
  78.      */ 
  79.     public function parseXmlAttr($attr,$tag) { 
  80.         //XML解析安全過濾 
  81.         $attr   =   str_replace('&','___'$attr);// 你這個替換是弄啥賴,哈哈 
  82.         $xml    =   '<tpl><tag '.$attr.' /></tpl>'
  83.         $xml    =   simplexml_load_string($xml); // 返回類 SimpleXMLElement 的一個對象,該對象的屬性包含 XML 文檔中的數據。如果失敗,則返回 false。 
  84.         if(!$xml) { 
  85.             E(L('_XML_TAG_ERROR_').' : '.$attr); 
  86.         }// 如果沒有獲取到 對應 
  87.         $xml    =   (array)($xml->tag->attributes());// 獲取到對應的屬性數組 
  88.         if(isset($xml['@attributes'])){ 
  89.             $array  =   array_change_key_case($xml['@attributes']); 
  90.             if($array) { // 如果已經 包含 了數據 
  91.                 $tag    =   strtolower($tag);// 獲取了 這里的 小寫 
  92.                 if(!isset($this->tags[$tag])){ 
  93.                     // 檢測是否存在別名定義 
  94.                     foreach($this->tags as $key=>$val){ 
  95.                         if(isset($val['alias']) && in_array($tag,explode(',',$val['alias']))){ 
  96.                             $item  =   $val
  97.                             break
  98.                         } 
  99.                     } 
  100.                 }else
  101.                     $item  =   $this->tags[$tag]; 
  102.                 }             
  103.                 $attrs  = explode(',',$item['attr']); 
  104.                 if(isset($item['must'])){ 
  105.                     $must   =   explode(',',$item['must']); 
  106.                 }else
  107.                     $must   =   array(); 
  108.                 } 
  109.                 foreach($attrs as $name) { 
  110.                     if( isset($array[$name])) { 
  111.                         $array[$name] = str_replace('___','&',$array[$name]); 
  112.                     }elseif(false !== array_search($name,$must)){ 
  113.                         E(L('_PARAM_ERROR_').':'.$name); 
  114.                     } 
  115.                 } 
  116.                 return $array
  117.             } 
  118.         }else
  119.             return array();// 返回 空字符串 
  120.         } 
  121.     }// 總結,反正沒看明白了,不知道里面放的一些什么了 
  122.   
  123.     /** 
  124.      * 解析條件表達式 
  125.      * @access public 
  126.      * @param string $condition 表達式標簽內容 
  127.      * @return array 
  128.      */ 
  129.     public function parseCondition($condition) { 
  130.         $condition = str_ireplace(array_keys($this->comparison),array_values($this->comparison),$condition); 
  131.         $condition = preg_replace('//$(/w+):(/w+)/s/is','$//1->//2 ',$condition); 
  132.         switch(strtolower(C('TMPL_VAR_IDENTIFY'))) { 
  133.             case 'array'// 識別為數組 
  134.                 $condition  =   preg_replace('//$(/w+)/.(/w+)/s/is','$//1["//2"] ',$condition); 
  135.                 break
  136.             case 'obj':  // 識別為對象 
  137.                 $condition  =   preg_replace('//$(/w+)/.(/w+)/s/is','$//1->//2 ',$condition); 
  138.                 break
  139.             default:  // 自動判斷數組或對象 只支持二維 
  140.                 $condition  =   preg_replace('//$(/w+)/.(/w+)/s/is','(is_array($//1)?$//1["//2"]:$//1->//2) ',$condition); 
  141.         } 
  142.         if(false !== strpos($condition'$Think')) 
  143.             $condition      =   preg_replace_callback('/(/$Think.*?)/s/is'array($this'parseThinkVar'), $condition);         
  144.         return $condition
  145.     }// 條件的 組合 
  146.   
  147.     /** 
  148.      * 自動識別構建變量 
  149.      * @access public 
  150.      * @param string $name 變量描述 
  151.      * @return string 
  152.      * 大哥啊,你也不給個例子呢 
  153.      */ 
  154.     public function autoBuildVar($name) { 
  155.         if('Think.' == substr($name,0,6)){ 
  156.             // 特殊變量 
  157.             return $this->parseThinkVar($name); 
  158.         }elseif(strpos($name,'.')) { 
  159.             $vars = explode('.',$name); 
  160.             $var  =  array_shift($vars); 
  161.             switch(strtolower(C('TMPL_VAR_IDENTIFY'))) { 
  162.                 case 'array'// 識別為數組 
  163.                     $name = '$'.$var
  164.                     foreach ($vars as $key=>$val){ 
  165.                         if(0===strpos($val,'$')) { 
  166.                             $name .= '["{'.$val.'}"]'
  167.                         }else
  168.                             $name .= '["'.$val.'"]'
  169.                         } 
  170.                     } 
  171.                     break
  172.                 case 'obj':  // 識別為對象 
  173.                     $name = '$'.$var
  174.                     foreach ($vars as $key=>$val
  175.                         $name .= '->'.$val
  176.                     break
  177.                 default:  // 自動判斷數組或對象 只支持二維 
  178.                     $name = 'is_array($'.$var.')?$'.$var.'["'.$vars[0].'"]:$'.$var.'->'.$vars[0]; 
  179.             } 
  180.         }elseif(strpos($name,':')){ 
  181.             // 額外的對象方式支持 
  182.             $name   =   '$'.str_replace(':','->',$name); 
  183.         }elseif(!defined($name)) { 
  184.             $name = '$'.$name
  185.         } 
  186.         return $name
  187.     } // 嗯嗯,想起來了,以前在 Tempalte 里面解析過呢 
  188.   
  189.     /** 
  190.      * 用于標簽屬性里面的特殊模板變量解析 
  191.      * 格式 以 Think. 打頭的變量屬于特殊模板變量 
  192.      * @access public 
  193.      * @param string $varStr  變量字符串 
  194.      * @return string 
  195.      * 這里的在 Template 里面是一樣的 
  196.      */ 
  197.     public function parseThinkVar($varStr){ 
  198.         if(is_array($varStr)){//用于正則替換回調函數 
  199.             $varStr = $varStr[1];  
  200.         } 
  201.         $vars       = explode('.',$varStr); 
  202.         $vars[1]    = strtoupper(trim($vars[1])); 
  203.         $parseStr   = ''
  204.         if(count($vars)>=3){ 
  205.             $vars[2] = trim($vars[2]); 
  206.             switch($vars[1]){ 
  207.                 case 'SERVER':    $parseStr = '$_SERVER[/''.$vars[2].'/']';break
  208.                 case 'GET':         $parseStr = '$_GET[/''.$vars[2].'/']';break
  209.                 case 'POST':       $parseStr = '$_POST[/''.$vars[2].'/']';break
  210.                 case 'COOKIE'
  211.                     if(isset($vars[3])) { 
  212.                         $parseStr = '$_COOKIE[/''.$vars[2].'/'][/''.$vars[3].'/']'
  213.                     }elseif(C('COOKIE_PREFIX')){ 
  214.                         $parseStr = '$_COOKIE[/''.C('COOKIE_PREFIX').$vars[2].'/']'
  215.                     }else
  216.                         $parseStr = '$_COOKIE[/''.$vars[2].'/']'
  217.                     } 
  218.                     break
  219.                 case 'SESSION'
  220.                     if(isset($vars[3])) { 
  221.                         $parseStr = '$_SESSION[/''.$vars[2].'/'][/''.$vars[3].'/']'
  222.                     }elseif(C('SESSION_PREFIX')){ 
  223.                         $parseStr = '$_SESSION[/''.C('SESSION_PREFIX').'/'][/''.$vars[2].'/']'
  224.                     }else
  225.                         $parseStr = '$_SESSION[/''.$vars[2].'/']'
  226.                     } 
  227.                     break
  228.                 case 'ENV':         $parseStr = '$_ENV[/''.$vars[2].'/']';break
  229.                 case 'REQUEST':  $parseStr = '$_REQUEST[/''.$vars[2].'/']';break
  230.                 case 'CONST':     $parseStr = strtoupper($vars[2]);break
  231.                 case 'LANG':       $parseStr = 'L("'.$vars[2].'")';break
  232.                 case 'CONFIG':    $parseStr = 'C("'.$vars[2].'")';break
  233.             } 
  234.         }else if(count($vars)==2){ 
  235.             switch($vars[1]){ 
  236.                 case 'NOW':       $parseStr = "date('Y-m-d g:i a',time())";break
  237.                 case 'VERSION':  $parseStr = 'THINK_VERSION';break
  238.                 case 'TEMPLATE':$parseStr = 'C("TEMPLATE_NAME")';break
  239.                 case 'LDELIM':    $parseStr = 'C("TMPL_L_DELIM")';break
  240.                 case 'RDELIM':    $parseStr = 'C("TMPL_R_DELIM")';break
  241.                 default:  if(defined($vars[1])) $parseStr = $vars[1]; 
  242.             } 
  243.         } 
  244.         return $parseStr
  245.     }// 這里以前用過的 
  246.   
  247.     // 獲取標簽定義 
  248.     public function getTags(){ 
  249.         return $this->tags; 
  250.     } 
  251.     // 無語返回 


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频―中文字幕| 国产精品日韩电影| 国产成人久久精品| 欧美主播福利视频| 亚洲电影免费观看高清完整版| 亚洲精品自拍第一页| 国产精品777| 久久九九免费视频| 亚洲色在线视频| 日韩福利在线播放| 日韩在线观看网站| 亚洲欧美国内爽妇网| 欧美大人香蕉在线| 日韩欧美aⅴ综合网站发布| 26uuu亚洲伊人春色| 91沈先生作品| 在线性视频日韩欧美| 亚洲级视频在线观看免费1级| 欧美日韩成人在线视频| 亚洲人成网站免费播放| 国产999在线观看| 91精品国产九九九久久久亚洲| 欧美乱大交xxxxx| 91日韩在线视频| 一本久久综合亚洲鲁鲁| 亚洲天堂男人天堂女人天堂| 深夜福利91大全| 日本午夜人人精品| 日韩免费av在线| 欧美性猛交xxxxx水多| 日本久久久久亚洲中字幕| 欧美日韩激情视频8区| 中文字幕亚洲欧美| 国产日韩专区在线| 热99精品只有里视频精品| 2025国产精品视频| 夜夜嗨av色一区二区不卡| 精品香蕉一区二区三区| 欧美一区二区影院| 麻豆成人在线看| 欧美一区视频在线| 久久精品亚洲国产| 91av在线网站| 色琪琪综合男人的天堂aⅴ视频| 亚洲美女动态图120秒| 性欧美亚洲xxxx乳在线观看| 久久精品成人一区二区三区| 亚洲一区二区三区久久| 九九热r在线视频精品| 日韩经典第一页| 国产精品一区二区电影| 日韩欧亚中文在线| 国产91精品久久久久久| 国产精品美女视频网站| 国产日韩在线精品av| 久久精品国产免费观看| 国产精品夜间视频香蕉| 日韩精品视频免费专区在线播放| 中文字幕日韩av| 66m—66摸成人免费视频| 日韩免费看的电影电视剧大全| 国产精品wwww| 日韩极品精品视频免费观看| 欧美日韩成人精品| 久久久国产精品亚洲一区| 国产日韩欧美中文在线播放| 97热在线精品视频在线观看| 亚洲欧美日韩精品久久| 国产精品女主播视频| 欧美精品在线免费| 精品国产网站地址| 亚洲aa在线观看| 国产欧美日韩高清| 精品视频在线导航| 国产精品久久久久久久久久尿| 欧美午夜精品伦理| 国产精品扒开腿做爽爽爽男男| 色综合天天综合网国产成人网| 国产精品精品一区二区三区午夜版| 在线观看国产精品淫| 亚洲男人天堂2024| 欧美一级视频免费在线观看| 91成人在线观看国产| 亚洲人在线观看| 欧美最近摘花xxxx摘花| 欧美黑人国产人伦爽爽爽| 久久精品色欧美aⅴ一区二区| 亚洲精品小视频在线观看| 国内精品久久久久久中文字幕| 国产精品久久久久久久久久免费| 国产亚洲精品一区二555| 一区二区亚洲欧洲国产日韩| 亚洲男人天堂古典| 欧美人与物videos| 欧美中文在线字幕| 精品日韩美女的视频高清| 国产成人精品免高潮费视频| 国产欧美亚洲精品| 亚洲一区美女视频在线观看免费| 色香阁99久久精品久久久| 日韩在线视频观看| 91精品视频免费| 国产网站欧美日韩免费精品在线观看| 中文字幕亚洲无线码在线一区| 久久久精品久久久久| 国产偷亚洲偷欧美偷精品| 欧美日韩一区二区免费在线观看| 国产精品99免视看9| 国产欧美一区二区三区视频| 欧美午夜片在线免费观看| 久久久亚洲精选| 中文字幕一区二区精品| 欧美午夜精品久久久久久浪潮| 国产精品免费网站| 国产v综合ⅴ日韩v欧美大片| 亚洲精品日韩丝袜精品| 91在线视频精品| 国产一区二区三区高清在线观看| 国产精品日日摸夜夜添夜夜av| 久久免费成人精品视频| www.午夜精品| 欧美日韩国产一中文字不卡| 欧美日韩国产一区在线| 成人福利视频网| 欧美精品久久久久久久| 最近中文字幕mv在线一区二区三区四区| 国产精品电影观看| 亚洲国产精品资源| 国产不卡一区二区在线播放| 91精品久久久久久久久久| 亚洲精品自拍第一页| 国产欧美精品在线| 91免费国产视频| 国产一区二区三区日韩欧美| 黑人巨大精品欧美一区二区免费| 蜜臀久久99精品久久久久久宅男| 午夜精品久久久久久99热软件| 狠狠躁夜夜躁人人爽天天天天97| 国产亚洲欧洲高清| 91久久精品美女| 亚洲视频一区二区三区| 91精品国产一区| 97在线免费观看| 国产人妖伪娘一区91| 亚洲色图综合久久| 2018日韩中文字幕| 日韩亚洲欧美成人| 亚洲自拍偷拍视频| 日韩欧美999| 久久久综合免费视频| 久久久久久久久久久人体| 亚洲成人精品av| 久久久欧美精品| 国产精品久久久久久久午夜| 亚洲网站在线播放| 国产视频亚洲视频| 色www亚洲国产张柏芝| 亚洲欧美另类在线观看| 欧美主播福利视频| 成人精品一区二区三区电影黑人| 成人激情春色网| 欧美中文字幕在线视频| 亚洲欧洲日本专区| 色偷偷av一区二区三区乱|