第一部分:簡(jiǎn)單概念
CMS(內(nèi)容管理系統(tǒng))
- 內(nèi)容管理系統(tǒng)(CMS)管理數(shù)字內(nèi)容的創(chuàng)建和修改庆冕,通常支持多個(gè)用戶協(xié)作管理。
- 實(shí)現(xiàn)基于WEB的內(nèi)容編輯孙乖、發(fā)布、展示份氧、檢索唯袄。
- 管理的內(nèi)容包括文本和嵌入圖形,照片蜗帜,視頻恋拷,音頻,地圖等元素厅缺。
- 大多數(shù)的CMS會(huì)主要解決兩部分功能:前臺(tái)模板的管理蔬顾,后臺(tái)數(shù)據(jù)的管理。
PHPCMS DEDECMS
WUZHICMS
- PHP開發(fā)
- 開源
MVC
MVC模式(Model–view–controller)是軟件工程中的一種軟件架構(gòu)模式湘捎,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)诀豁、視圖(View)和控制器(Controller)。
- 控制器(Controller)- 負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求消痛,對(duì)請(qǐng)求進(jìn)行處理(頁面的路由)且叁。
- 視圖(View) - 界面設(shè)計(jì)人員進(jìn)行圖形界面設(shè)計(jì)。
-
模型(Model) - 程序員編寫程序應(yīng)有的功能(實(shí)現(xiàn)算法等等)秩伞、數(shù)據(jù)庫專家進(jìn)行數(shù)據(jù)管理和數(shù)據(jù)庫設(shè)計(jì)(可以實(shí)現(xiàn)具體的功能)逞带。
目的
- 可擴(kuò)展性
- 可復(fù)用性
- 可維護(hù)性
- 靈活性加強(qiáng)
第二部分:五指CMS的結(jié)構(gòu)
-
專業(yè)版本結(jié)構(gòu):
默認(rèn)版本結(jié)構(gòu):
運(yùn)行機(jī)制
- 入口文件 index.php
<?php
/**
* 程序入口文件
*/
//檢測(cè)PHP環(huán)境
if(PHP_VERSION < '5.2.0') die('Require PHP > 5.2.0 ');
//定義當(dāng)前的網(wǎng)站物理路徑
define('WWW_ROOT',dirname(__FILE__).'/');
require './configs/web_config.php';
require COREFRAME_ROOT.'core.php';
$app = load_class('application');
$app->run();
?>
- 配置文件 web_config.php
<?php
defined('WWW_ROOT') or exit('No direct script access allowed');
define('COREFRAME_ROOT',substr(dirname(__FILE__),0,-7).'coreframe'.DIRECTORY_SEPARATOR);
define('CACHE_ROOT',substr(dirname(__FILE__),0,-7).'caches'.DIRECTORY_SEPARATOR);
define('CACHE_EXT','OQ52M');
//勿忘-網(wǎng)站上線后,需要修改下面 3項(xiàng)
define('OPEN_DEBUG',0);//開啟調(diào)試模式纱新?2 服務(wù)器上開發(fā)調(diào)試 展氓;1 本地開發(fā)調(diào)試,遇到錯(cuò)誤終止脸爱;0 關(guān)閉-網(wǎng)站上線后遇汞,需要關(guān)閉該項(xiàng)
define('AUTO_CACHE_TPL',1);//是否自動(dòng)緩存模版,網(wǎng)站上線后,必須關(guān)閉該項(xiàng)
define('ERROR_REPORT',1);//錯(cuò)誤信息現(xiàn)實(shí)級(jí)別:1 空入,顯示高級(jí)別錯(cuò)誤络它,0 關(guān)閉錯(cuò)誤提醒(上線后,使用該項(xiàng)) 2 顯示所有錯(cuò)誤(開發(fā)模式)
//define('TEST_CHECKCODE',1);//1 打開測(cè)試驗(yàn)證碼歪赢,0 正常驗(yàn)證碼
//define('SQL_LOG',1);//記錄操作SQL
define('WWW_PATH','/');//網(wǎng)站安裝路徑化戳,二級(jí)目錄形式為:/mydemo/
define('WEBURL','http://www.zgw.com/');//網(wǎng)站域名
//Cookie配置
define('COOKIE_DOMAIN','');//Cookie 作用域
define('COOKIE_PATH','/');//Cookie 作用路徑
define('COOKIE_PRE','XEt_'); //Cookie 前綴
define('COOKIE_TTL',0); //Cookie 生命周期,0 表示隨瀏覽器進(jìn)程
//附件相關(guān)配置
define('ATTACHMENT_ROOT',WWW_ROOT.'uploadfile/');
define('ATTACHMENT_URL','http://www.zgw.com/uploadfile/');//附件路徑
define('R','http://www.zgw.com/res/');//靜態(tài)文件存儲(chǔ)目錄
define('_KEY','MZymUMYv'); //密鑰,最長(zhǎng)8位
define('LANG','zh-cn'); //網(wǎng)站默認(rèn)語言包
define('FOUNDERS','1'); //網(wǎng)站創(chuàng)始人ID埋凯,多個(gè)ID逗號(hào)分隔
define('TIME_ZONE','Etc/GMT-8');
define('CHARSET','utf-8');
define('POSTFIX','.html');//.html/.htm/.shtml
define('CLOSE',0);//關(guān)閉網(wǎng)站前臺(tái)所有動(dòng)態(tài)PHP功能点楼,包括API
define('_SU','wuzhicms');
//開啟移動(dòng)頁面自動(dòng)識(shí)別
define('SUPPORT_MOBILE',0);//0,不支持移動(dòng)頁面白对,1掠廓,自動(dòng)識(shí)別,動(dòng)態(tài)甩恼,偽靜態(tài)下可用蟀瞧,靜態(tài)頁面通過js判斷跳轉(zhuǎn)到動(dòng)態(tài)地址完成識(shí)別
//默認(rèn)模版配置
define('TPLID','p1');
//開啟站群
define('ENABLE_SITES',0);
define('TEST_CHECKCODE',1);//1 打開測(cè)試驗(yàn)證碼,0 正常驗(yàn)證碼
define('SQL_LOG',0);
//強(qiáng)制刷新css,js緩存
define('VN', uniqid());//正常情況為 define('VN', 1);
- core.php
<?php
defined('WWW_ROOT') or exit('No direct script access allowed');
/**
* 核心文件
*/
define('VERSION','4.0.0');
$GLOBALS = array();
define('SYSTEM_NAME','wuzhicms');
define('IN_WZ',true);
if(ERROR_REPORT==1) {
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
} elseif(ERROR_REPORT==0) {
error_reporting(0);
} else {
error_reporting(E_ALL);
}
ini_set('display_errors', 1);
set_exception_handler('log_exception');
//開始運(yùn)行時(shí)間
$GLOBALS['_startTime'] = microtime(true);
if(version_compare(PHP_VERSION,'5.4.0','<')) {
ini_set('magic_quotes_runtime',0);
define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc() ? 1 : 0);
} else {
define('MAGIC_QUOTES_GPC', 0);
}
define('IS_WIN',strstr(PHP_OS, 'WIN') ? 1 : 0);
define('IS_CLI',PHP_SAPI=='cli'? 1 : 0);
define('SYS_TIME', time());
define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');
//設(shè)置本地時(shí)差
date_default_timezone_set(TIME_ZONE);
//輸出頁面字符集
header('Content-type: text/html; charset='.CHARSET);
//if(extension_loaded("zlib") && !ob_start("ob_gzhandler")) ob_start();
//將GET媳拴,POST 參數(shù)全部轉(zhuǎn)給 GLOBALS 黄橘,然后注銷 get/post
set_globals();
load_function('common');
autoload();
$_POST['SUPPORT_MOBILE'] = SUPPORT_MOBILE;
/**
* 加載類函數(shù)
* @param string $class 類名稱
* @param string $m 模塊英文名
* @param string $param 初始化參數(shù)
* @return class
*/
function load_class($class, $m = 'core', $param = NULL) {
static $static_class = array();
//判斷是否存在類,存在則直接返回
if (isset($static_class[$class])) {
return $static_class[$class];
}
$name = FALSE;
if (file_exists(COREFRAME_ROOT.'app/'.$m.'/libs/class/'.$class.'.class.php')) {
$name = 'WUZHI_'.$class;
if (class_exists($name, FALSE) === FALSE) {
require_once(COREFRAME_ROOT.'app/'.$m.'/libs/class/'.$class.'.class.php');
}
}
//如果存在擴(kuò)展類屈溉,則初始化擴(kuò)展類
if ($class!='application' && $class!='admin' && file_exists(COREFRAME_ROOT.'app/'.$m.'/libs/class/EXT_'.$class.'.class.php')) {
$name = 'EXT_'.$class;
if (class_exists($name, FALSE) === FALSE) {
require_once(COREFRAME_ROOT.'app/'.$m.'/libs/class/EXT_'.$class.'.class.php');
}
}
if ($name === FALSE) {
$full_dir = '';
if(OPEN_DEBUG) $full_dir = COREFRAME_ROOT.'app/'.$m.'/libs/class/';
echo 'Unable to locate the specified class: '.$full_dir.$class.'.class.php';
exit();
}
$static_class[$class] = isset($param) ? new $name($param) : new $name();
return $static_class[$class];
}
/**
* 加載類函數(shù)
* @param string $filename 名稱
* @param string $m 模塊英文名
*/
function load_function($filename, $m = 'core') {
static $static_func = array();
//判斷是否加載過,存在則直接返回
if (isset($static_func[$filename])) {
return true;
}
require_once(COREFRAME_ROOT.'app/'.$m.'/libs/function/'.$filename.'.func.php');
}
/**
* 加載類函數(shù)
* @param string $filename 文件名稱
* @param string $param 參數(shù)名稱
* @return array|string
*/
function get_config($filename,$param = '') {
static $config;
if(isset($config[$filename])) return $param ? $config[$filename][$param] : $config[$filename];
if(file_exists(WWW_ROOT.'configs/'.$filename.'.php')) {
$config[$filename] = include WWW_ROOT.'configs/'.$filename.'.php';
} else {
$full_dir = '';
if(OPEN_DEBUG) $full_dir = WWW_ROOT.'configs/';
echo 'Unable to locate the specified config: '.$full_dir.$filename.'.php';
exit();
}
return $param ? $config[$filename][$param] : $config[$filename];
}
function autoload() {
$path = COREFRAME_ROOT.'extend/function/*.func.php';
$auto_funcs = glob($path);
if(!empty($auto_funcs) && is_array($auto_funcs)) {
foreach($auto_funcs as $func_path) {
include $func_path;
}
}
}
/**
* 檢查GLOBALS中是否存在變量
* @param $key
* @param int $check_sql 是否sql_replace過濾
* @return mixed|string
*/
function input($key,$check_sql = 1) {
if(isset($GLOBALS[$key])) {
return $check_sql ? sql_replace($GLOBALS[$key]) : $GLOBALS[$key];
} else {
return '';
}
}
function set_globals() {
if(isset($_GET)) {
foreach ($_GET as $_key => $_value) {
$GLOBALS[$_key] = gpc_stripslashes($_value);
}
$_GET = array();
}
if(isset($_POST)) {
foreach ($_POST as $_key => $_value) {
$GLOBALS[$_key] = gpc_stripslashes($_value);
}
$_POST = array();
}
if(isset($GLOBALS['page'])) {
$GLOBALS['page'] = max(intval($GLOBALS['page']),1);
$GLOBALS['page'] = min($GLOBALS['page'],100000000);
} else {
$GLOBALS['page'] = 0;
}
$_COOKIE = gpc_stripslashes($_COOKIE);
$GLOBALS['_groupid'] = get_cookie('_groupid');
if(!$GLOBALS['_groupid']) {
$GLOBALS['_groupid'] = 4;
}
}
function p_addslashes($string) {
if(is_array($string)) {
$keys = array_keys($string);
foreach($keys as $key) {
$val = $string[$key];
unset($string[$key]);
$string[addslashes($key)] = p_addslashes($val);
}
} else {
$string = addslashes($string);
}
return $string;
}
function p_stripslashes($string) {
if ( ! is_array($string)){
return stripslashes($string);
}
return array_map('p_stripslashes', $string);
}
function gpc_stripslashes($data) {
if(MAGIC_QUOTES_GPC) {
return p_stripslashes($data);
} else {
return $data;
}
}
/**
* 設(shè)置 cookie
* @param string $string 變量名
* @param string $value 變量值
* @param int $time 過期時(shí)間
* @param bool $encrypt = true 是否加密存儲(chǔ)
*/
function set_cookie($string, $value = '', $time = 0, $encrypt = true) {
$time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);
$s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;
$string = COOKIE_PRE.$string;
if($encrypt) $value = encode($value);
setcookie($string, $value, $time, COOKIE_PATH, COOKIE_DOMAIN, $s);
}
/**
* 獲取通過 set_cookie 設(shè)置的 cookie 變量
* @param string $string 變量名
* @param string $default 默認(rèn)值
* @return mixed 成功則返回cookie 值抬探,否則返回 false
*/
function get_cookie($string, $default = '', $encrypt = true) {
$string = COOKIE_PRE.$string;
return isset($_COOKIE[$string]) ? decode($_COOKIE[$string]) : $default;
}
/**
*
* @param string $string 變量名
* @return array
*/
function p_unserialize($string) {
if(($ret = unserialize($string)) === false) {
$ret = unserialize(stripslashes($string));
}
return $ret;
}
/**
* 加密字符串
*
* @param $string
* @param string $key
*/
function encode($string,$key = '') {
$encode = load_class('encrypt');
return $encode->encode($string,$key);
}
/**
* 解密字符串
*
* @param $string
* @param string $key
*/
function decode($string,$key = '') {
$encode = load_class('encrypt');
return $encode->decode($string,$key);
}
/**
* Error handler, passes flow over the exception logger with new ErrorException.
*/
function log_error( $num, $str, $file, $line, $context = null ) {
if(ERROR_REPORT<2 && $num==8) return '';
log_exception( new ErrorException( $str, 0, $num, $file, $line ));
}
/**
* Uncaught exception handler.
*/
function log_exception($e) {
$file = str_replace(rtrim(COREFRAME_ROOT,'/'),'coreframe->',$e->getFile());
$file = str_replace(rtrim(WWW_ROOT,'/'),'www->',$file);
$file = str_replace(rtrim(CACHE_ROOT,'/'),'caches->',$file);
$data = array();
$data['type'] = get_class($e);
$data['msg'] = $e->getMessage();
$data['file'] = $file;
$data['line'] = $e->getLine();
$data['version'] = VERSION;
$data['php_version'] = PHP_VERSION;
$data['referer'] = URL();
if (ERROR_REPORT) {
if(IS_CLI==0 && !defined('CLI_DISPLAY')) {
print "<!DOCTYPE html><div style='text-align: center;'>";
print "<h5 style='color: rgb(190, 50, 50);'>WuzhiCMS Exception Occured:</h5>";
print "<table style='width: 800px; display: inline-block;'>";
print "<tr style='background-color:rgb(230,230,230);text-align:left;'><th style='width: 80px;'>Type</th><td>" . $data['type'] . "</td></tr>";
print "<tr style='background-color:rgb(240,240,240);text-align:left;'><th>Message</th><td>{$data['msg']}</td></tr>";
print "<tr style='background-color:rgb(230,230,230);text-align:left;'><th>File</th><td>{$file}</td></tr>";
print "<tr style='background-color:rgb(240,240,240);text-align:left;'><th>Line</th><td>{$data['line']}</td></tr>";
print "<tr style='background-color:rgb(230,230,230);'><th colspan='2'><a target='_blank'>Need Help?</a></th></tr>";
print "</table></div>";
} else {
print "------------- WuzhiCMS Exception Occured:------------- \r\n";
print "Type: {$data['type']} \r\n";
print "Message: {$data['msg']} \r\n";
print "File: {$data['file']} \r\n";
print "Line: {$data['line']} \r\n";
print date('Y-m-d H:i:s')."\r\n";
}
if(OPEN_DEBUG) exit();
} else {
$message = "Time: " . date('Y-m-d H:i:s') . "; Type: " . $data['type'] . "; Message: {$e->getMessage()}; File: {$data['file']}; Line: {$data['line']};";
@file_put_contents(CACHE_ROOT. "logs/error-".CACHE_EXT.'-'.date("ym").".log", $message . PHP_EOL, FILE_APPEND );
}
}
- application.class.php (Controller)
<?php
defined('IN_WZ') or exit('No direct script access allowed');
/**
* M/F/V 路由
*/
final class WUZHI_application {
/**
* @var app子巾,模塊名,取值方式:M
*/
private $_m;
/**
* @var 文件名 取值方式:F
*/
private $_f;
/**
* @var 方法名 取值方式:V
*/
private $_v;
/**
* Class constructor
*/
public function __construct() {
self::setconfig();
define('M',$this->_m);
define('F',$this->_f);
define('V',$this->_v);
}
/**
* 設(shè)置路由
*/
/**
* 設(shè)置路由
*/
private function setconfig() {
$sn = $_SERVER["SERVER_NAME"];
$route_config = get_config('route_config');
if(isset($route_config[$sn])) {
$route_config = $route_config[$sn];
} else {
$route_config = $route_config['default'];
}
$this->_m = isset($GLOBALS['m']) ? sql_replace($GLOBALS['m']) : $route_config['m'];
$this->_f = isset($GLOBALS['f']) ? sql_replace($GLOBALS['f']) : $route_config['f'];
$this->_v = isset($GLOBALS['v']) ? sql_replace($GLOBALS['v']) : $route_config['v'];
$this->_v = strip_tags($this->_v);
if(isset($route_config['_get'])) {
foreach($route_config['_get'] as $key=>$value) {
$_GET[$key] = $value;
}
}
}
/**
* 運(yùn)行
*/
public function run() {
$file = $this->load_file();
if(!defined('IN_ADMIN')) {
if(CLOSE) {
$siteconfigs = get_cache('siteconfigs');
MSG($siteconfigs['close_reason']);
}
}
if (method_exists($file, V)) {
if (preg_match('/^[_]/i', V)) {
exit('You are visiting the action is to protect the private action');
} else {
call_user_func(array($file, V));
}
} elseif(class_exists($GLOBALS['_CLASS_NAME_'],FALSE)) {
exit('Action:'.V.' not exists.');
}
}
/**
* 加載文件
* @param string $filename 文件名
* @param string $app 所屬模塊
* @param string $param 初始化參數(shù)
* @return bool
*/
public static function load_file($filename = '', $app = '', $param = '') {
static $static_file = array();
if(isset($GLOBALS['_su']) && $GLOBALS['_su']== _SU) {
$_admin_dir = '/admin';
} else {
$_admin_dir = '';
}
//判斷是否存在類小压,存在則直接返回
if (isset($static_file[$filename])) {
return $static_file[$filename];
}
if (empty($filename)) $filename = F;
if (empty($app)) $app = M;
$filepath = COREFRAME_ROOT.'app/'.$app.$_admin_dir.'/'.$filename.'.php';
$name = FALSE;
if (file_exists($filepath)) {
//$name = 'WUZHI_'.$filename;
$name = $filename;
if (class_exists($name, FALSE) === FALSE) {
require_once($filepath);
}
}
//如果存在擴(kuò)展類线梗,則初始化擴(kuò)展類
if (file_exists(COREFRAME_ROOT.'app/'.$app.$_admin_dir.'/EXT_'.$filename.'.php')) {
$name = 'EXT_'.$filename;
if (class_exists($name, FALSE) === FALSE) {
require_once(COREFRAME_ROOT.'app/'.$app.$_admin_dir.'/EXT_'.$filename.'.php');
}
}
$GLOBALS['_CLASS_NAME_'] = '';
if ($name === FALSE) {
$full_dir = '';
if(OPEN_DEBUG) {
$full_dir = COREFRAME_ROOT.'app/'.$app.$_admin_dir.'/';
} else {
$full_dir = '/coreframe/app/'.$app.$_admin_dir.'/';
}
$filename = strip_tags($filename);
echo 'Unable to locate the specified filename: '.$full_dir.$filename.'.php';
exit();
}
if (class_exists($name, FALSE) === FALSE) {
return TRUE;
}
$GLOBALS['_CLASS_NAME_'] = $name;
$static_file[$filename] = isset($param) ? new $name($param) : new $name();
return $static_file[$filename];
}
}
-
app/* (Module)
附:index.php
<?php
class index{
private $siteconfigs;
public function __construct() {
$this->db = load_class('db');
$this->siteid = $_GET['siteid'] ? $_GET['siteid'] : 1;
$this->siteconfigs = get_cache('siteconfigs_'.$this->siteid);
}
/**
* 網(wǎng)站首頁
*/
public function init() {
$isindex = 1;
$siteconfigs = $this->siteconfigs;
$seo_title = $siteconfigs['sitename'];
$seo_keywords = $siteconfigs['seo_keywords'];
$seo_description = $siteconfigs['seo_description'];
$categorys = get_cache('category','content');
$_uid = get_cookie('_uid');
if(ENABLE_SITES) {
$siteid = intval($_GET['siteid']);
if(!$siteid) $siteid = 1;
$tplid = TPLID.'-'.$siteid;
} else {
$tplid = TPLID;
}
$language_set = 1;
include T('content','index',$tplid);
}
}
-
頁面模板(View)
第三部分:常見常用的函數(shù)、方法
- 全局函數(shù)
/**
* 加載類函數(shù)
* @param string $class 類名稱
* @param string $m 模塊英文名
* @param string $param 初始化參數(shù)
* @return class
*/
function load_class($class, $m = 'core', $param = NULL) {
...
}
/**
* 加載類函數(shù)
* @param string $filename 名稱
* @param string $m 模塊英文名
*/
function load_function($filename, $m = 'core') {
...
}
/**
* 加載類函數(shù)
* @param string $filename 文件名稱
* @param string $param 參數(shù)名稱
* @return array|string
*/
function get_config($filename,$param = '') {
...
}
/**
* 設(shè)置 cookie
* @param string $string 變量名
* @param string $value 變量值
* @param int $time 過期時(shí)間
* @param bool $encrypt = true 是否加密存儲(chǔ)
*/
function set_cookie($string, $value = '', $time = 0, $encrypt = true) {
...
}
/**
* 獲取通過 set_cookie 設(shè)置的 cookie 變量
* @param string $string 變量名
* @param string $default 默認(rèn)值
* @return mixed 成功則返回cookie 值怠益,否則返回 false
*/
function get_cookie($string, $default = '', $encrypt = true) {
...
}
...
core/libs/funtion/common.func.php
- 數(shù)據(jù)庫操作方法
/**
* 查詢多條數(shù)據(jù)
* @param $table 數(shù)據(jù)表名
* @param array|string $where 條件 仪搔,數(shù)組或者字符串 .如:array('id'=>1,'cid'=>1) 或 `id`=1 AND `cid`=1
* @param string $field 要查詢的字段
* @param int $startid 開始索引,如果是從第二條開始蜻牢,那么則為1烤咧,mysql從0開始索引
* @param int $pagesize 每頁顯示數(shù)量,如果不分頁抢呆,則顯示為總數(shù)
* @param int $page 當(dāng)前頁
* @param string $order 排序
* @param string $group mysql group by 屬性
* @param string $keyfield 以某字段名為結(jié)果索引
* @param string $urlrule url規(guī)則
* @param array $array url規(guī)則中的參數(shù)名和參數(shù)值煮嫌,二維數(shù)組
* @param int $colspan 分頁顯示總列數(shù)
* @return array
*/
final public function get_list($table, $where = '', $field = '*', $startid = 0, $pagesize = 200, $page = 0, $order = '', $group = '', $keyfield = '', $urlrule = '',$array = array(),$colspan = 10) {
..
}
/**
* 獲取單條記錄查詢
* @param $table 表名稱
* @param $where 查詢條件
* @param $field 需要查詢的字段[多個(gè)字段用逗號(hào)隔開:例如,field1,field2]
* @param $startid 開始的條數(shù)抱虐,limit $startid,10
* @param $order 排序方式 [默認(rèn)按數(shù)據(jù)庫默認(rèn)方式排序]
* @param $group 分組方式 [默認(rèn)為空]
* @return array/null 數(shù)據(jù)查詢結(jié)果集,如果不存在昌阿,則返回空
*/
final public function get_one($table, $where = '', $field = '*', $startid = 0, $order = '', $group = '') {
...
}
/**
* 執(zhí)行添加記錄操作
* @param $data 要增加的數(shù)據(jù),參數(shù)為數(shù)組。數(shù)組key為字段值懦冰,數(shù)組值為數(shù)據(jù)取值
* @param $returnid 是否返回新建ID號(hào)
* @param $replace_into 是否采用 replace into的方式添加數(shù)據(jù)
* @return boolean
*/
final public function insert($table, $data, $returnid = TRUE, $replace_into = FALSE) {
...
}
/**
* 執(zhí)行更新記錄操作
* @param $data 要更新的數(shù)據(jù)內(nèi)容灶轰,參數(shù)可以為數(shù)組也可以為字符串,建議數(shù)組刷钢。
* 為數(shù)組時(shí)數(shù)組key為字段值笋颤,數(shù)組值為數(shù)據(jù)取值
* @param $where 更新數(shù)據(jù)時(shí)的條件,可為數(shù)組或字符串
* @return boolean
*/
final public function update($table, $data, $where = '') {
...
}
/**
* 執(zhí)行刪除記錄操作
* @param $where 刪除數(shù)據(jù)條件,不充許為空。
* @return boolean
*/
final public function delete($table, $where = '') {
...
}