简单谈谈PHP面向对象之标识对象


Posted in PHP onJune 27, 2017

标识对象模式

这个模式主要功能就是创建sql语句中的wehre条件字符串的,下面直接看代码和注释:

namespace woo\mapper;


//字段对象
class Field {
  protected $name = null;     //字段名称
  protected $operator = null;     //操作符  
  protected $comps = array();     //存放条件的数组  
  protected $incomplete = false;   //检查条件数组是否有值
  
  function __construct ($name){
    $this->name= $name;
  }
  
  //添加where 条件
  function addTest($operator,$value){
    $this->comps[] = array('name'=>$this->name,'operator'=>$operator,'value'=>$value);
  }
  
  //获取存放条件的数组
  function getComps(){
    return $this->comps;
  }
  
  function isIncomplete(){
    return empty($this->comps);
  }
}


//标识对象
class IdentityObject {
  protected $currentfield = null;    //当前操作的字段对象
  protected $fields = array();    //字段集合
  private $and = null;
  private $enforce = array();      //限定的合法字段    
  
  function __construct($field = null, array $enforce = null){
    if(!is_null($enforce)){
      $this->enforce = $enforce;
    }
    if(!is_null($field)){
      $this->field($field);
    }
  }
  
  //获取限定的合法字段
  function getObjectFields(){
    return $this->enforce;
  }
  
  //主要功能为设置当前需要操作的对象
  function field($fieldname){
    if(!$this->isVoid()&& $this->currentfield->isIncomplete()){
      throw new \Exception("Incomplete field");
    }
    $this->enforceField($fieldname);
    if(isset($this->fields[$fieldname]){
      $this->currentfield = $this->fields[$fieldname];
    } else {
      $this->currentfield = new Field($fieldname);
      $this->fields[$fieldname] = $this->currentfield;
    }
    return $this;          //采用连贯语法
  }
  
  //字段集合是否为空
  function isVoid(){
    return empty($this->fields);
  }
  
  //检查字段是否合法
  function enforceField ($fieldname){
    if(!in_array($fieldname,$this->enforce) && !empty($this->enforce)){
      $forcelist = implode(',',$this->enforce);
      throw new \Exception("{$fieldname} not a legal field {$forcelist}");
    }
  }
  
  
  //向字段对象添加where条件
  function eq($value){
    return $this->operator("=",$value);
  }
  
  function lt($value){
    return $this->operator("<",$value);
  }
  
  function gt($value){
    return $this->operator(">",$value);
  }
  
  //向字段对象添加where条件
  private function operator($symbol,$value){
    if($this->isVoid){
      throw new \Exception("no object field defined");
    }
    $this->currentfield->addTest($symbol,$value);
    return $this;                   //采用连贯语法
  }
  
  //获取此类中所有字段对象集合的where条件数组
  function getComps(){
    $ret = array();
    foreach($this->fields as $key => $field){
      $ret = array_merge($ret,$field->getComps());
    }
    return $ret;
  }
}

//客户端代码
$idobj = new IdentityObject ();
$idobj->field("name")->eq("The Good Show")->field("start")->gt(time())->lt(time()+(24*60*60));
$test = $idobj->getComps();
var_dump($test);

//输出类似下面的内容

/*
array{
  array('name'=>'name','operator'=>'=','value'=>'The Good Show'),
  array('name'=>'start','operator'=>'>','value'=>'123456'),  //123456表示time()函数输出的时间戳
  array('name'=>'start','operator'=>'<','value'=>'123456')
}

*/

以上这篇简单谈谈PHP面向对象之标识对象就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用php+mysql一个名片库程序
Oct 09 PHP
isset和empty的区别
Jan 15 PHP
php中取得URL的根域名的代码
Mar 23 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
php遍历目录方法小结
Mar 10 PHP
PHP生成器简单实例
May 13 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 #PHP
PHP面向对象之工作单元(实例讲解)
Jun 26 #PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 #PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 #PHP
php-fpm开启状态统计的方法详解
Jun 23 #PHP
PHP多种序列化/反序列化的方法详解
Jun 23 #PHP
PHP后端银联支付及退款实例代码
Jun 23 #PHP
You might like
第十四节--命名空间
2006/11/16 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
form自动提交实例讲解
2017/07/10 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
python3音乐播放器简单实现代码
2020/04/20 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python 将pdf转成图片的方法
2018/04/23 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
python实现大量图片重命名
2020/03/23 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
python matlab库简单用法讲解
2020/12/31 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
应聘教师求职信范文
2015/03/20 职场文书
三下乡活动心得体会
2016/01/23 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书