简单谈谈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与javascript对多项选择的处理
Oct 09 PHP
php 无限级 SelectTree 类
May 19 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php读取excel文件的简单实例
Aug 26 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
php 的多进程操作实践案例分析
Feb 28 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
PHP的开发框架的现状和展望
2007/03/16 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
自制PHP框架之设计模式
2017/05/07 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
python文字转语音实现过程解析
2019/11/12 Python
python调用接口的4种方式代码实例
2019/11/19 Python
Python中如何引入第三方模块
2020/05/27 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
比驿:全球酒店比价网
2018/06/20 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
长辈证婚人证婚词
2014/01/09 职场文书
安全技术说明书
2014/05/09 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
2015年安全生产责任书
2015/01/30 职场文书
会计工作态度自我评价
2015/03/06 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
文明礼仪主题班会
2015/08/13 职场文书