我们要来设计一个方法
Model专有的load函数,保证每个Model都有load函数,能通过一定条件加载这个Model 。接下来我们以UserModel为例来讲解一下
1.类似 Control 一样我们来设计一个Model的基类(抽象类),譬如_Model
2.让我们的UserModel继承与_Model,注意 以后每个Model都要继承它
3.在_Model中写一个load函数,接受参数(可以为空)
4.在_Model中写个变量 $_view_name ,用子类进行设置表名或者视图名
5.我们假设每个表都有一个主键,并且默认名为ID
代码:functions.php
function load_model($modelName){
$_Model_Path = LKPHP_PATH.'/MVC/Model/_Model.inc';//基类Model
if(!class_exists('_Model')){
require($_Model_Path);
}
$_mdPath = LKPHP_PATH.'/MVC/Model/'.$modelName.'.inc';//基类Model
if(!class_exists($modelName)){
require($_mdPath);
}
return new $modelName();
}
_Model.icn
<?php
abstract class _Model{
public $_view_name ='';
public $_id = 0;
public $_id_key='id';//主键的字段名
function load($where=''){
if($this->_view_name === ''||$this->_id === 0) return;
$vars = get_object_vars($this);
$sql ='';
foreach ($vars as $key => $value) {
if(trim($value) === ''){
if($sql !== ''){
$sql .=',';
}
$sql .=$key;
}
}
if($sql === '') return;
$sql = 'select '.$sql.' from '.$this->_view_name.' where ';
if($where === ''){
$sql.=$this->_id_key.'='.$this->_id;
}else{
$sql .= $where;
}
$db = load_db();
$ret = $db->execForArray($sql);
if($ret && count($ret) ===1){
$ret = $ret[0];
$var_keys = array_keys($vars);
foreach ($ret as $key => $value) {
if(in_array($key,$var_keys)){
$this->$key = $value;
}
}
}
}
}
?>
UserModel.inc
<?php
class UserModel extends _Model {
var $username = '';
var $password = '';
var $email ='';
var $reg_time = 0;
function UserModel(){
}
}
?>
index.inc
<?php
class index extends _Master{
function showindex(){
//测试下数据库操作
/*
$db = load_db();
$newslist=$db->execForArray('select * from onethink_action');
header('Content-Type:text/html;charset=utf8');
foreach ($newslist as $value) {
echo '标题:'.$value['title'].' 标注:'.$value['remark'].'<br/>';
}*/
include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/index.php');
//最新使用Model
$user = load_model('UserModel');
$user->_view_name = 'onethink_ucenter_member';
$user->_id = 1;
$user->load();
echo '<hr/>';
var_export($user);
}
}
?>