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

首頁 > CMS > Discuz > 正文

關于discuz X3.2中$discuz->var['mod']的理解

2024-09-11 09:03:24
字體:
來源:轉載
供稿:網友

在member.php中有這么一段代碼:

  1. $mod = !in_array($discuz->var['mod'], $modarray) && (!preg_match('/^/w+$/'$discuz->var['mod']) || !file_exists(DISCUZ_ROOT.'./source/module/member/member_'.$discuz->var['mod'].'.php')) ? 'register' : $discuz->var['mod']; 

從上面的紅色部分我們可以看出,這是一個3元運算,好了說重點:$discuz->var['mod']

首先從結構(->)上我們可以看出這是一個類的對象,但具體又是什么呢?我們來看$discuz,在member.php中有如下代碼:

  1. require './source/class/class_core.php';//引入class_core.php 
  2. $discuz = C::app();//調用類C中的app方法 

打開引入class_core.php文件,在該文件中有如下代碼:

  1. C::creatapp(); 
  2. class core{....} 
  3. class C extends core {} 

從上可知,類c繼承自core,所以C::creatapp()等價于core::creatapp(),現在來看core::creatapp()

  1. public static function creatapp() { 
  2. if(!is_object(self::$_app)) {//判斷$_app是不是對象 
  3. self::$_app = discuz_application::instance(); //如果不是對象,把類discuz_application中instance方法返回結果賦值給$_app; 
  4. //Vevb.com 
  5. return self::$_app;//返回$_app 

這里又出現了一個類discuz_application,這個類定義在./source/class/discuz/discuz_application.php文件中,這里并沒有引用該文件,那么這個類是如何實現調用的呢?這里就涉及到了類的另外一種加載方法:類自動加載,當類discuz_application不存在是就會調用下面的:

  1. if(function_exists('spl_autoload_register')) { 
  2. spl_autoload_register(array('core''autoload')); 
  3. else { 
  4. function __autoload($class) { 
  5. return core::autoload($class); 

這里最終會執行的是ore::autoload().

這里都會調用 core::autoload('discuz_application');下面進入到autoload方法:

  1. public static function autoload($class) { 
  2. //分析類名,獲取類所在的目錄 
  3. $class = strtolower($class); 
  4. if(strpos($class'_') !== false) { 
  5. list($folder) = explode('_'$class); 
  6. $file = 'class/'.$folder.'/'.substr($classstrlen($folder) + 1); 
  7.  
  8. else { 
  9. $file = 'class/'.$class
  10. //執行后$file='class/discuz/application' 
  11. try { 
  12. //調用import方法 
  13. self::import($file); 
  14. return true; 
  15.  
  16. } catch (Exception $exc) { 
  17.  
  18. $trace = $exc->getTrace(); 
  19. foreach ($trace as $log) { 
  20. if(emptyempty($log['class']) && $log['function'] == 'class_exists') { 
  21. return false; 
  22. discuz_error::exception_error($exc); 

下面該進入self::import($file);self表示類本身,所以就等價于:core::import($file),也就是core::import('class/discuz/application'):

  1. public static function import($name$folder = ''$force = true) { 
  2. //分析傳入的參數$file,獲取類所在的文件名及路徑 
  3. $key = $folder.$name
  4. if(!isset(self::$_imports[$key])) { 
  5. $path = DISCUZ_ROOT.'/source/'.$folder
  6. if(strpos($name'/') !== false) { 
  7. $pre = basename(dirname($name)); 
  8. $filename = dirname($name).'/'.$pre.'_'.basename($name).'.php'
  9. else { 
  10. $filename = $name.'.php'
  11. //確定文件名及路徑$filename=‘class/discuz/discuz_application.php’ 
  12. //引入文件 
  13. if(is_file($path.'/'.$filename)) { 
  14. include $path.'/'.$filename
  15. self::$_imports[$key] = true; 
  16.  
  17. return true; 
  18. elseif(!$force) { 
  19. return false; 
  20. else { 
  21. throw new Exception('Oops! System file lost: '.$filename); 
  22. return true; 

上面已近分析了discuz_application的自動加載,下面回到上面講到的self::$_app=discuz_application::instance()部分,現在已經知道這個類的位置,我們進入到/source/class/discuz/discuz_application.php,找到instance()方法:

  1. //這是個引用返回方法.
  2. static function &instance() {  
  3. static $object
  4. if(emptyempty($object)) { 
  5. $object = new self(); 
  6. return $object
  7. //通過這個方法將類discuz_application實例化,實例對象即:$object,那么self::$_app=discuz_application::instance()也就是相當于把對象賦給了self::$_app 

至此,class_core.php文件中的C::creatapp();也就執行完畢了,現在回到member.php中.

  1. require './source/class/class_core.php';//引入class_core.php 
  2. $discuz = C::app();//調用類C中的app方法 

我們再來看看class_core.php文件中的C::app();

  1. public static function app() { 
  2. return self::$_app

這個很簡單啦,就是返回其成員$_app,前面已近說了$_app就是類discuz_application的實例化.

ok,現在再來看$discuz = C::app(),這也就是說又將類discuz_application的實例化賦值給了$discuz,那么$discuz->var['mod']就很好理解了.

$discuz->var['mod']就表示類discuz_application的對象$discuz中的成員var['mod'];

我們再來看看類discuz_application中的var:

  1. global $_G
  2. $_G = array(....此處省略5km代碼) 
  3. //....此處再省略5km代碼 
  4. if(defined('SUB_DIR')) { 
  5. $_G['siteurl'] = str_replace(SUB_DIR, '/'$_G['siteurl']); 
  6. $_G['siteroot'] = str_replace(SUB_DIR, '/'$_G['siteroot']); 
  7.  
  8. $this->var = & $_G

現在明白了var實際上就是全局變量$_G,至于鍵值可以mod在$_G是沒有的,繼續往下看:

在方法_init_input()中有如下定義:

$this->var['mod'] = empty($_GET['mod']) ? '' : dhtmlspecialchars($_GET['mod']);

又是一個3元運算符,這下徹底明白了var['mod']表示的就是url中變量mod參數,自此總算搞清楚了,在構造函數中包含了這個函數,所以實例化時就已經執行了這個函數:

  1. public function __construct() { 
  2. $this->_init_env(); 
  3. $this->_init_config(); 
  4. $this->_init_input(); 
  5. $this->_init_output(); 

這里有一個方法:dhtmlspecialchars():

  1. function dhtmlspecialchars($string) { 
  2. if(is_array($string)) { 
  3. foreach($string as $key => $val) { 
  4. $string[$key] = dhtmlspecialchars($val); 
  5. else { 
  6. $string = str_replace(array('&''"''<''>'), array('&''"''<''>'), $string); 
  7. if(strpos($string, '

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品视频| 茄子视频成人在线| 日韩欧美成人精品| 日韩精品视频在线| 91爱爱小视频k| 成人美女免费网站视频| 国产精品免费电影| 日韩中文娱乐网| 欧美精品九九久久| 91精品视频免费观看| 亚洲美女性视频| 欧美日韩亚洲国产一区| 国产精品伦子伦免费视频| 成人免费在线视频网站| 日韩电影中文字幕在线观看| 欧美大片在线看免费观看| 国产精品中文在线| 国产视频久久久| www.精品av.com| 欧美中文在线观看| 欧美激情2020午夜免费观看| 久久国产加勒比精品无码| 欧美亚洲成人免费| 一区二区国产精品视频| 亚洲欧美综合精品久久成人| 一区二区在线视频播放| 国产成人涩涩涩视频在线观看| 欧美日韩在线第一页| 色综合导航网站| 91精品久久久久久久久中文字幕| 狠狠色香婷婷久久亚洲精品| 亚洲欧美国产另类| 亚洲第一中文字幕在线观看| 日韩在线播放一区| 国产91对白在线播放| 国产美女久久精品| 久久99久国产精品黄毛片入口| 一区二区欧美亚洲| 亚洲xxxx3d| 中文字幕在线成人| 欧美精品videosex性欧美| 97成人超碰免| 精品久久久免费| 国产精品久久一区主播| 成人情趣片在线观看免费| 中文字幕欧美专区| 国产一区香蕉久久| 亚洲自拍偷拍第一页| 川上优av一区二区线观看| 国产色综合天天综合网| 亚洲男人天天操| 久久成人这里只有精品| 欧美午夜激情视频| 中文字幕在线看视频国产欧美在线看完整| 亚洲成人免费在线视频| 色无极亚洲影院| 成人av番号网| 大荫蒂欧美视频另类xxxx| 久久久久久国产三级电影| 欧美—级高清免费播放| 日韩大片免费观看视频播放| 欧美一级bbbbb性bbbb喷潮片| 久久久久久久久亚洲| 亚洲午夜精品久久久久久久久久久久| 欧美视频在线观看免费网址| 亚洲性无码av在线| 久久天天躁狠狠躁老女人| 美女精品视频一区| 精品成人69xx.xyz| 亚洲在线视频福利| 亚洲精品网站在线播放gif| 91最新国产视频| 久久精品国产91精品亚洲| 日本国产一区二区三区| 欧美专区第一页| 亚洲激情视频网| 成人在线免费观看视视频| 亚洲天堂开心观看| 欧洲日韩成人av| 永久免费看mv网站入口亚洲| 日韩电影网在线| 精品日韩美女的视频高清| 中文字幕精品久久| 日韩电影视频免费| 亚洲xxxx在线| 免费97视频在线精品国自产拍| 亚洲色图av在线| 在线中文字幕日韩| 国产日韩专区在线| 国产成人一区二区三区小说| 精品国产一区二区三区在线观看| 国产九九精品视频| 国产日韩欧美中文在线播放| 亚洲www在线| 欧美在线视频观看免费网站| 777午夜精品福利在线观看| 在线日韩中文字幕| 亚洲成人黄色网| 久久精品视频中文字幕| 国产精品观看在线亚洲人成网| 亚洲自拍欧美色图| 国内精品美女av在线播放| 亚洲精品一区二区网址| 国产精品视频大全| 欧美另类69精品久久久久9999| 国产精品美女www| 国产精品亚洲网站| 国产精品视频1区| 亚洲视频综合网| 久久久久久亚洲精品不卡| 91国产中文字幕| 一区二区三区在线播放欧美| 国产精品老牛影院在线观看| 国产98色在线| 久久精品一区中文字幕| 欧洲午夜精品久久久| 欧美黑人极品猛少妇色xxxxx| 日韩视频免费观看| 欧美国产日韩视频| 国产精品久久久av| yw.139尤物在线精品视频| 成人精品久久久| 国产成人一区二区在线| 亚洲伊人久久综合| 亚洲新中文字幕| 国产精自产拍久久久久久| 日韩美女写真福利在线观看| 日韩精品极品在线观看播放免费视频| 国产91在线播放| 亚洲欧美变态国产另类| 亚洲成色www8888| 久久av红桃一区二区小说| 国产97人人超碰caoprom| 日韩国产在线看| 欧美重口另类videos人妖| 国产精品极品在线| 国产精品视频一区国模私拍| 欧美又大粗又爽又黄大片视频| 美日韩在线视频| 国产精品久久久久久久久久| 日韩欧美精品中文字幕| 亚洲精品日韩欧美| 亚洲国产一区二区三区在线观看| 亚洲精品98久久久久久中文字幕| 国产一区二区三区三区在线观看| 亚洲第一页自拍| 国产精品96久久久久久又黄又硬| 欧美电影院免费观看| 色婷婷久久一区二区| 性欧美在线看片a免费观看| 一区二区三区四区在线观看视频| 久久久www成人免费精品| 热re91久久精品国99热蜜臀| 国产97在线观看| 欧洲亚洲妇女av| 九九精品在线视频| 欧美午夜视频在线观看| 国产成人拍精品视频午夜网站| 亚洲三级黄色在线观看| 欧美一级视频免费在线观看| 亚洲国产精品小视频| 91精品国产一区| 亚洲美女久久久| 91色中文字幕|