全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

标识对象模式

这个模式主要功能就是创建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 面向对象详解  # PHP面向对象教程之自定义类  # 实例讲解PHP面向对象之多态  # 给大家  # 主要功能  # 希望能  # 这篇  # 小编  # 大家多多  # 面向对象  # 为空  # 类中  # 客户端  # 是否合法  # false  # function  # array  # incomplete  # comps  # operator  # empty  # isIncomplete  # IdentityObject 


相关文章: 宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  如何打造高效商业网站?建站目的决定转化率  ,怎么在广州志愿者网站注册?  如何快速搭建高效WAP手机网站?  如何构建满足综合性能需求的优质建站方案?  c# await 一个已经完成的Task会发生什么  视频网站制作教程,怎么样制作优酷网的小视频?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  独立制作一个网站多少钱,建立网站需要花多少钱?    建站主机CVM配置优化、SEO策略与性能提升指南  如何快速搭建高效WAP手机网站吸引移动用户?  b2c电商网站制作流程,b2c水平综合的电商平台?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  建站主机选虚拟主机还是云服务器更好?  如何做网站制作流程,*游戏网站怎么搭建?  C#如何在一个XML文件中查找并替换文本内容  如何选择适合PHP云建站的开源框架?  PHP正则匹配日期和时间(时间戳转换)的实例代码  淘宝制作网站有哪些,淘宝网官网主页?  详解jQuery中基本的动画方法  韩国服务器如何优化跨境访问实现高效连接?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何有效防御Web建站篡改攻击?  高防服务器租用首荐平台,企业级优惠套餐快速部署  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  如何在腾讯云服务器上快速搭建个人网站?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  高防服务器如何保障网站安全无虞?  建站之星导航菜单设置与功能模块配置全攻略  建站主机选哪家性价比最高?  如何用PHP工具快速搭建高效网站?  如何快速生成橙子建站落地页链接?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  jQuery 常见小例汇总  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  威客平台建站流程解析:高效搭建教程与设计优化方案  宿州网站制作公司兴策,安徽省低保查询网站?  建站之星图片链接生成指南:自助建站与智能设计教程  购物网站制作公司有哪些,哪个购物网站比较好?  C++如何编写函数模板?(泛型编程入门)  制作旅游网站html,怎样注册旅游网站?  开封网站制作公司,网络用语开封是什么意思?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  建站之星安装后如何配置SEO及设计样式?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。