在学习《phpcms V9首页模板文件解析》的第七步,我们看到content_model类,文件路径:phpcms/model/content_model.class.php

从代码中,可以得知content_model类继承于model类。那么model类又是什么呢?

下面请看数据模型基类model类的解析。文件路径:phpcms\libs\classes\model.class.php

代码及注释,如下所示:

 <?php
/**
* model.class.php 数据模型基类
* 文件路径:phpcms/libs/classes/model.class.php
*
* @copyright (C) 2005-2010 PHPCMS
* @license http://www.phpcms.cn/license/
* @lastmodify 2010-6-7
*/
// 理解一点:phpcms/model文件夹下的所有文件的model子类都继承于这个model
defined('IN_PHPCMS') or exit('Access Denied');
pc_base::load_sys_class('db_factory', '', 0); // 数据库工厂类,路径:phpcms/libs/classes/db_factory.class.php class model
{
//数据库配置
protected $db_config = '';
//数据库连接
protected $db = '';
//调用数据库的配置项
protected $db_setting = 'default';
//数据表名
protected $table_name = '';
//表前缀
public $db_tablepre = '';
//构造函数
public function __construct()
{
if (!isset($this->db_config[$this->db_setting]))
{
$this->db_setting = 'default';
}
/**
* $this->db_config['default'];相当于caches/configs/database.php文件返回的数组
* return array (
'default' => array (
'hostname' => 'localhost', // 主机名
'port' => 3306, // 端口
'database' => 'phpcmsv9', // 数据库名
'username' => 'root', // 数据库用户名
'password' => '', // 数据库密码
'tablepre' => 'v9_', // 数据表前缀
'charset' => 'gbk', // 数据库字符编码
'type' => 'mysql', // 数据库类型:例如:mysql、access等等,根据数据库类型不同加载不同的数据库驱动
'debug' => true,
'pconnect' => 0,
'autoconnect' => 0 ),
);
**/
$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.db_factory工厂类主要采用单例模式返回一个唯一的数据库连接实例对象
* 2.db_factory工厂类在实例化数据库实例时,会根据当前数据库的type,加载不同的数据库驱动,返回不同的数据库实例对象
* 3.db_factory工厂类通过get_instance方法从caches/configs/database.php文件中获取数据库配置信息
**/
} /**
* 执行sql查询
* @param $where 查询条件[例`name`='$name']
* @param $data 需要查询的字段值[例`name`,`gender`,`birthday`]
* @param $limit 返回结果范围[例:10或10,10 默认为空]
* @param $order 排序方式 [默认按数据库默认方式排序]
* @param $group 分组方式 [默认为空]
* @param $key 返回数组按键名排序
* @return array 查询结果集数组
*/
final public function select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')
{
if (is_array($where))
$where = $this->sqls($where);
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的select方法
return $this->db->select($data, $this->table_name, $where, $limit, $order, $group, $key);
} /**
* 查询多条数据并分页
* @param $where
* @param $order
* @param $page
* @param $pagesize
* @return unknown_type
*/
final public function listinfo($where = '', $order = '', $page = 1, $pagesize = 20, $key='', $setpages = 10,$urlrule = '',$array = array(), $data = '*')
{
$where = to_sqls($where);
$this->number = $this->count($where);
$page = max(intval($page), 1);
$offset = $pagesize*($page-1);
$this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages);
$array = array();
if ($this->number > 0)
{
return $this->select($where, $data, "$offset, $pagesize", $order, '', $key);
}
else
{
return array();
}
} /**
* 获取单条记录查询
* @param $where 查询条件
* @param $data 需要查询的字段值[例`name`,`gender`,`birthday`]
* @param $order 排序方式 [默认按数据库默认方式排序]
* @param $group 分组方式 [默认为空]
* @return array/null 数据查询结果集,如果不存在,则返回空
*/
final public function get_one($where = '', $data = '*', $order = '', $group = '')
{
if (is_array($where))
$where = $this->sqls($where);
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的get_one方法
return $this->db->get_one($data, $this->table_name, $where, $order, $group);
} /**
* 直接执行sql查询
* @param $sql 查询sql语句
* @return boolean/query resource 如果为查询语句,返回资源句柄,否则返回true/false
*/
final public function query($sql)
{
$sql = str_replace('phpcms_', $this->db_tablepre, $sql);
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的query方法
return $this->db->query($sql);
} /**
* 执行添加记录操作
* @param $data 要增加的数据,参数为数组。数组key为字段值,数组值为数据取值
* @param $return_insert_id 是否返回新建ID号
* @param $replace 是否采用 replace into的方式添加数据
* @return boolean
*/
final public function insert($data, $return_insert_id = false, $replace = false)
{
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的insert方法
return $this->db->insert($data, $this->table_name, $return_insert_id, $replace);
} /**
* 获取最后一次添加记录的主键号
* @return int
*/
final public function insert_id()
{
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的insert_id方法
return $this->db->insert_id();
} /**
* 执行更新记录操作
* @param $data 要更新的数据内容,参数可以为数组也可以为字符串,建议数组。
* 为数组时数组key为字段值,数组值为数据取值
* 为字符串时[例:`name`='phpcms',`hits`=`hits`+1]。
* 为数组时[例: array('name'=>'phpcms','password'=>'123456')]
* 数组的另一种使用array('name'=>'+=1', 'base'=>'-=1');程序会自动解析为`name` = `name` + 1, `base` = `base` - 1
* @param $where 更新数据时的条件,可为数组或字符串
* @return boolean
*/
final public function update($data, $where = '')
{
if (is_array($where))
$where = $this->sqls($where);
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的update方法
return $this->db->update($data, $this->table_name, $where);
} /**
* 执行删除记录操作
* @param $where 删除数据条件,不充许为空。
* @return boolean
*/
final public function delete($where)
{
if (is_array($where))
$where = $this->sqls($where);
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的delete方法
return $this->db->delete($this->table_name, $where);
} /**
* 计算记录数
* @param string/array $where 查询条件
*/
final public function count($where = '')
{
$r = $this->get_one($where, "COUNT(*) AS num");
return $r['num'];
} /**
* 将数组转换为SQL语句
* @param array $where 要生成的数组
* @param string $font 连接串。
*/
final public function sqls($where, $font = ' AND ')
{
if (is_array($where))
{
$sql = '';
foreach ($where as $key=>$val)
{
$sql .= $sql ? " $font `$key` = '$val' " : " `$key` = '$val'";
}
return $sql;
/**
* foreach 可以遍历数据与对象,它会把当前单元(元素)的键名在每次循环中被赋给变量$key,值赋给变量$val。
* $row=array('one'=>1,'two'=>2);
* foreach($row as $key=>$val)
* {
* echo $key.'--'.$val;
* }
* 执行结果:
* 第一次遍历的$key是one,$val是1;
* 第二次遍历的$key是two,$val是2;
**/
}
else
{
return $where;
}
} /**
* 获取最后数据库操作影响到的条数
* @return int
*/
final public function affected_rows()
{
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的affected_rows方法
return $this->db->affected_rows();
} /**
* 获取数据表主键
* @return array
*/
final public function get_primary()
{
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的get_primary方法
return $this->db->get_primary($this->table_name);
} /**
* 获取表字段
* @param string $table_name 表名
* @return array
*/
final public function get_fields($table_name = '')
{
if (empty($table_name))
{
$table_name = $this->table_name;
}
else
{
$table_name = $this->db_tablepre.$table_name;
}
//如果加载的数据库驱动类型是mysql,则会调用phpcms/libs/classes/mysql.class.php数据库驱动文件类库的get_fields方法
return $this->db->get_fields($table_name);
} /**
* 检查表是否存在
* @param $table 表名
* @return boolean
*/
final public function table_exists($table)
{
return $this->db->table_exists($this->db_tablepre.$table);
} /**
* 检查字段是否存在
* @param $field 字段名
* @return boolean
*/
public function field_exists($field)
{
$fields = $this->db->get_fields($this->table_name);
return array_key_exists($field, $fields);
} final public function list_tables()
{
return $this->db->list_tables();
}
/**
* 返回数据结果集
* @param $query (mysql_query返回值)
* @return array
*/
final public function fetch_array()
{
$data = array();
while($r = $this->db->fetch_next())
{
$data[] = $r;
}
return $data;
} /**
* 返回数据库版本号
*/
final public function version()
{
return $this->db->version();
}
}

备注:phpcms/model文件夹下的所有文件中的类都继承于这个model类。

Good Good Study, Day  Day  Up.

顺序  选择  循环  总结

phpcms V9 数据模型基类的更多相关文章

  1. phpcms V9 数据模型基类(转)

    转自:http://www.cnblogs.com/Braveliu/p/5100421.html 在学习<phpcms V9首页模板文件解析>的第七步,我们看到content_model ...

  2. PHPCMS V9 模块开发 二次开发实例 留言本

    鄙人实现了PHPCMS V9 产品开发权威指南(2011官方最新版).doc中的留言板实例,并加上模块安装和卸载功能, 程序可以运行,但只实现基本功能,目的是想让和我一样徘徊在PHPCMS门口不知道从 ...

  3. phpcms v9二次开发之数据模型类

    系统模型类:model.class.php数据模型类的位置:/phpcms/libs/classes phpcms v9二次开发中,我们要经常需要对模块的数据表进行查询.添加.修改和删除数据等操作,所 ...

  4. phpcms v9二次开发之模型类的应用(1)

    在<phpcms二次开发之模型类model.class.php>中讲到了模型类的建立方法,接下来我讲一下模型类的应用.      前段时间我基于phpcms v9开发了一个足球网.足球网是 ...

  5. phpcms v9二次开发之模型类的应用(2)

    二.模型操作方法select()--查询语句         //查询级别管理列表信息    public function levellists() { $lelists = $this->l ...

  6. phpcms V9 添加模块

    为phpcms创建一个模块的开发流程 [1]创建模块目录 通过前面的学习,我们已经知道phpcms V9框架中的模块位于phcms/modules目录中,每一个目录称之为一个模块. 如果要创建一个模块 ...

  7. phpcms V9 添加模块(转)

    转自:http://www.cnblogs.com/Braveliu/p/5101345.html 为phpcms创建一个模块的开发流程 [1]创建模块目录 通过前面的学习,我们已经知道phpcms ...

  8. phpcms V9 首页模板文件解析

    在了解了<phpcms V9 URL访问解析>之后,我们已经知道首页最终执行的是content模块下index控制器的init方法. 下面, 我们逐步分析过程如下: 第一.首页默认执行的是 ...

  9. PHPCMS V9 框架代码分析(入口程序)

    PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口. 入口程序是在前期处理用户请求的引导程序.它是 ...

随机推荐

  1. [CareerCup] 17.7 English Phrase Describe Integer 英文单词表示数字

    17.7 Given any integer, print an English phrase that describes the integer (e.g., "One Thousand ...

  2. LeetCode 刷题顺序表

    Id Question Difficulty Frequency Data Structures Algorithms 1 Two Sum 2 5 array + set sort + two poi ...

  3. Oracle 部分函数使用说明

    oracle有些函数可能我知道是什么作用,但是具体其实说不清楚,这里是我这几天看到的函数使用方法及说明,记录一下,以后看看 --1.replace('str',oldVal,newVal)替换功能方法 ...

  4. scala - Enumeration 诡异问题

    object WeekDay extends Enumeration { type WeekDay = Value val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Va ...

  5. HDU1019

    Least Common Multiple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  6. acm常见算法及例题

    转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题  初期:一.基本算法:     (1)枚举. (poj17 ...

  7. Codeforces Round #192 (Div. 2)

    吐槽一下,这次的CF好简单啊. 可是我为什么这么粗心这么大意这么弱.把心沉下来,想想你到底想做什么! A 题意:O(-1) 思路:O(-1) #include <iostream> #in ...

  8. 深入理解C++虚函数表

    虚函数表是C++类中存放虚函数的一张表,理解虚函数表对于理解多态很重要. 本次使用的编译器是VS2013,为了简化操作,不用去操作函数指针,我使用到了VS的CL编译选项来查看类的内存布局. CL使用方 ...

  9. C++ 画星号图形——空心正方形(核心代码)

    //输出m行m列的空心正方矩形. int m;//m用来控制行列数. cout<<"请输入要打印的行列数n(n>=4):\n"; cin>>m; ;i ...

  10. 杭电ACM 1201

    #include <stdio.h> int func(int year){ if ( year % 400 == 0 || (year % 4 == 0 &&year % ...