简单谈谈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 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
php根据年月获取季度的方法
Mar 31 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
Oct 24 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
Laravel如何自定义command命令浅析
Mar 23 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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
Python中的迭代器漫谈
2015/02/03 Python
使用Python抓取模板之家的CSS模板
2015/03/16 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Django分组聚合查询实例分享
2020/04/29 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
社区工作感言
2014/02/21 职场文书
售后服务承诺书
2014/03/26 职场文书
沈阳故宫导游词
2015/01/31 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
少先队中队工作总结
2015/08/14 职场文书