从此不求人:自主研发一套PHP前端开发框架(12)

我们要来设计一个方法

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);
       }
   }
 ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值