国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > PhpCMS > 正文

phpcmsv9源碼學習:數據庫model、foreground類

2024-09-10 07:15:39
字體:
來源:轉載
供稿:網友

在PHPCMS二次開發中,PHP頁面的代碼的開頭總要繼承很多類,今天對這些類做了一點研究,做個筆記.

  1. <?php   
  2.    
  3. defined('IN_PHPCMS'or exit('No permission resources.');   
  4.    
  5. //加載表單類form.class.php,‘’空參數表示類文件的路徑,加載的系統類庫里面的類,參數“0”表示不實例化類   
  6. pc_base::load_sys_class('form');    
  7.    
  8. //判斷用戶是否登錄,未登錄就注冊   
  9. pc_base::load_app_class('foreground');    
  10.    
  11. //加載數據庫類模型 model.class   
  12. pc_base::load_sys_class('model''', 0);   
  13.    
  14. class favorite extends foreground {   
  15.     function __construct() {   
  16.         $this->db = pc_base::load_model('content_model');   
  17.     }   
  18.        
  19.     public function init(){   
  20.         }   
  21.    }   
  22. ?>

(1)foreground.class.php在member模塊對應的文件夾下,它定義了一個foreground類,是index類的基類,代碼如下:

  1. class foreground {   
  2. public $db$memberinfo;   
  3. private $_member_modelinfo;   
  4.     
  5. public function __construct() {   
  6.     self::check_ip();   
  7.     $this->db = pc_base::load_model('member_model');   
  8.     ...    //Vevb.com 
  9.     ...   
  10. }   
  11. ....   
  12. ....   
  13. }

foreground類就只有三個成員和三個方法,其中三個方法分別用來: 初始化數據庫, 檢測用戶是否已經登錄(大概是通過cookie中的auth字段進行判斷, 木有仔細看, 日后再說), 判斷IP是否在禁止列表中.

(2) pc_base::load_model(‘member_model’);

通過pc_base::load_model()加載數據庫模型:member_model. 其中pc_base::load_model()方法就是pc_base::load_class()的簡單封裝, 加載位于C:/www/phpcmsv9/phpcms/model/member_model.class.php的類文件.

member_model.class.php這個文件沒多少行代碼, 其中有一行pc_base::load_sys_class(‘model’, ”, 0);

這一行加載位于C:/www/phpcmsv9/phpcms/libs/classes/model.class.php的文件.

model.class.php定義了一個model類,model類是所有數據庫模型的基類,比如member_model的基類就是model類.

model封裝了一系列數據庫操作,包括但不限于CURD.(當然,這層封裝是是基于phpcmsv9的mysql.class.php等,后者才是真正地對php提供的數據庫api的進行封裝.)

model.class.php前面兩句如下:

defined('IN_PHPCMS') or exit('Access Denied');

pc_base::load_sys_class('db_factory', '', 0);

通過 load_sys_class(‘db_factory’, ”, 0); 加載db_factory.class.php, 第3個參數0表示不要建立db_factory對象.(因為db_factory是單實例-工廠模式,單實例模式要求該類不能從外部實例化).

model類的構造函數如下:

  1. public function __construct()    
  2. {   
  3.     if (!isset($this->db_config[$this->db_setting]))    
  4.    {   
  5.        $this->db_setting = 'default';   
  6.     }   
  7.     $this->table_name = $this->db_config[$this->db_setting]['tablepre'].$this->table_name;   
  8.     $this->db_tablepre = $this->db_config[$this->db_setting]['tablepre'];   
  9.     $this->db = db_factory::get_instance($this->db_config)->get_database($this->db_setting);   
  10. }

1),獲取數據庫配置(member_model類構造時已經設置相關數據成員).

2),調用單實例類db_factory的get_instance建立實例,并由get_database返回一個數據庫對象, 并賦值給$this->db這個數據成員.

比如model類的select()方法,單實例模式,工廠模式都是常用的設計模式.:

  1. final public function select($where = ''$data = '*'$limit = ''$order = ''$group = ''$key='')    
  2. {   
  3.       if (is_array($where)) $where = $this->sqls($where);   
  4.       return $this->db->select($data$this->table_name, $where$limit$order$group$key);   
  5. }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赞皇县| 巴东县| 庄浪县| 东方市| 收藏| 赫章县| 霍邱县| 东乌珠穆沁旗| 邮箱| 始兴县| 通道| 明星| 岢岚县| 敦化市| 武陟县| 肥西县| 集安市| 巴林左旗| 庆元县| 德清县| 丰宁| 凤山县| 成武县| 武穴市| 平和县| 肇东市| 嘉峪关市| 兴安县| 阿荣旗| 德保县| 安新县| 惠水县| 漳浦县| 黄梅县| 长顺县| 新津县| 镇坪县| 琼结县| 延长县| 安龙县| 滨州市|