在PHPCMS二次開發中,PHP頁面的代碼的開頭總要繼承很多類,今天對這些類做了一點研究,做個筆記.
- <?php
- defined('IN_PHPCMS') or exit('No permission resources.');
- //加載表單類form.class.php,‘’空參數表示類文件的路徑,加載的系統類庫里面的類,參數“0”表示不實例化類
- pc_base::load_sys_class('form');
- //判斷用戶是否登錄,未登錄就注冊
- pc_base::load_app_class('foreground');
- //加載數據庫類模型 model.class
- pc_base::load_sys_class('model', '', 0);
- class favorite extends foreground {
- function __construct() {
- $this->db = pc_base::load_model('content_model');
- }
- public function init(){
- }
- }
- ?>
(1)foreground.class.php在member模塊對應的文件夾下,它定義了一個foreground類,是index類的基類,代碼如下:
- class foreground {
- public $db, $memberinfo;
- private $_member_modelinfo;
- public function __construct() {
- self::check_ip();
- $this->db = pc_base::load_model('member_model');
- ... //Vevb.com
- ...
- }
- ....
- ....
- }
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類的構造函數如下:
- public function __construct()
- {
- if (!isset($this->db_config[$this->db_setting]))
- {
- $this->db_setting = 'default';
- }
- $this->table_name = $this->db_config[$this->db_setting]['tablepre'].$this->table_name;
- $this->db_tablepre = $this->db_config[$this->db_setting]['tablepre'];
- $this->db = db_factory::get_instance($this->db_config)->get_database($this->db_setting);
- }
1),獲取數據庫配置(member_model類構造時已經設置相關數據成員).
2),調用單實例類db_factory的get_instance建立實例,并由get_database返回一個數據庫對象, 并賦值給$this->db這個數據成員.
比如model類的select()方法,單實例模式,工廠模式都是常用的設計模式.:
- final public function select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')
- {
- if (is_array($where)) $where = $this->sqls($where);
- return $this->db->select($data, $this->table_name, $where, $limit, $order, $group, $key);
- }
新聞熱點
疑難解答