多数大学生出来选择的工作和专业无关
首页 > 专业知识

ThinkPHP框架Model分析研究

时间:2017-08-01 17:32:29 [来源]:郑州PHP培训学校

   ThinkPHP框架Model分析研究

  也会涉及thinkphp中一些常用的函数,我也会进行相应的分析。基础Model类中 涉及:
  1、查询数据表中字段的缓存功能
  2、方法的重载去实现thinkphp常用的查询函数
  3、命名范围的使用及好处
  4、添加数据前对数据的处理及字段类型验证
  5、延迟更新数据等
  
  1、查询数据表中字段的缓存功能
  DB_FIELDS_CACHE 在框架中默认是关闭的 ,即是C("DB_FIELDS_CACHE")返回false的,可以在相应的应用配置文件中设置这个选项。开启以后,查询表时,先检测是否有缓存字段,如果有就使用缓存的字段,不再去进行数据库的读取,节省了数据库资源。如果没有,才进行数据库的读取,并且通过 $this->flush() 函数将表的字段名称及类型缓存到如下文件夹下:
 
  // 缓存不存在则查询数据表信息
  $this->db->setModel($this->name);
  $fields =   $this->db->getFields($this->getTableName());
  <strong>if</strong>(!$fields) { // 无法获取字段信息
  <strong>return false</strong>;
  }
  $this->fields   =   array_keys($fields);
  <strong>unset</strong>($this->fields['_pk']);
  <strong>foreach </strong>($fields <strong>as </strong>$key=>$val){
  // 记录字段类型
  $type[$key]     =   $val['type'];
  <strong>if</strong>($val['primary']) {
  // 增加复合主键支持
  <strong>if </strong>(<strong>isset</strong>($this->fields['_pk']) && $this->fields['_pk'] != <strong>null</strong>) {
  <strong>if </strong>(is_string($this->fields['_pk'])) {
  $this->pk   =   <strong>array</strong>($this->fields['_pk']);
  $this->fields['_pk']   =   $this->pk;
  }
  $this->pk[]   =   $key;
  $this->fields['_pk'][]   =   $key;
  } <strong>else </strong>{
  $this->pk   =   $key;
  $this->fields['_pk']   =   $key;
  }
  <strong>if</strong>($val['autoinc']) $this->autoinc   =   <strong>true</strong>;
  }
  }
  
  两个函数同时用到了缓存函数F函数。F函数快速文件数据读取和保存 针对简单类型数据 字符串、数组,下文我们还会提到另一个缓存函数S,它可以支持复查的数据类型及缓存有效期的设置等。总之Model基础类通过这两个函数实现了字段的缓存功能。
  2、方法的重载去实现thinkphp常用的查询函数
  $M->where('id=84')->order("id desc")->select();
  这样的查询表达式在thinkphp框架中非常实现,但是又找不到order、where对应的方法,它们是如何实现的呢?
  这样的情况下,一般都是方法的重载实现的。Model类也是如此。
 

上一篇:PHP程序6面向对象分析的原则

下一篇:Windows下PHP+MySQL+IIS安全平台