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

 更新时间:2017年06月27日 10:18:01   投稿:jingxian  
下面小编就为大家带来一篇简单谈谈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图像裁剪缩略裁切类源码及使用方法的相关资料,需要的朋友可以参考下
    2016-01-01
  • ThinkPhP5整合微信小程序订阅消息实用代码

    ThinkPhP5整合微信小程序订阅消息实用代码

    记录一下开发小程序消息推送的实例,配合后端tp推送,要使用微信订阅通知功能,需要用户首先在小程序点击订阅后,后台方可推送相关订阅通知模板,否则无法直接推送
    2023-08-08
  • Thinkphp5框架异常处理操作实例分析

    Thinkphp5框架异常处理操作实例分析

    这篇文章主要介绍了Thinkphp5框架异常处理操作,结合实例形式分析了Thinkphp5框架异常处理操作原理、操作方法与相关使用技巧,需要的朋友可以参考下
    2020-06-06
  • 纯PHP代码实现支付宝批量付款

    纯PHP代码实现支付宝批量付款

    最近在做一个使用支付宝转账的项目,其中有需求把我难到了:批量支付成功后不知道怎么接收系统返回的通知,经过朋友帮忙,此功能实现,下面小编把具体代码整理分享给大家,供大家参考
    2015-12-12
  • thinkphp项目如何自定义微信分享描述内容

    thinkphp项目如何自定义微信分享描述内容

    本文主要讲述:在thinkphp框架中,如何获取微信分享接口权限、如何设置安全域名、如何修改微信分享标题、修改微信分享描述、修改微信分享图片、如何定制微信分享内容
    2017-02-02
  • laravel5.6 框架邮件队列database驱动简单demo示例

    laravel5.6 框架邮件队列database驱动简单demo示例

    这篇文章主要介绍了laravel5.6 框架邮件队列database驱动,结合实例形式详细分析了laravel5.6邮件队列database驱动具体设置、实现步骤与相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • ThinkPHP写数组插入与获取最新插入数据ID实例

    ThinkPHP写数组插入与获取最新插入数据ID实例

    这篇文章主要介绍了ThinkPHP写数组插入与获取最新插入数据ID的方法,实例讲述了ThinkPHP基于数组操作数据库的方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • php实现微信发红包

    php实现微信发红包

    现在微信发红包比较流行,大家都会使用微信发红包,马上又该过年了,发红包又要开始了,小编这就给大家分享一个php实现微信发红包程序的算法,非常的实用,这里推荐给小伙伴们,有需要的朋友可以参考下。
    2015-12-12
  • IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)

    IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成

    IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)...
    2006-12-12
  • CI(CodeIgniter)框架介绍

    CI(CodeIgniter)框架介绍

    CodeIgniter 是一个为用 PHP 编写网络应用程序的人员提供的工具包。它的目标是实现让你比从零开始编写代码更快速地开发项目,为此,CI 提供了一套丰富的类库来满足通常的任务需求,并且提供了一个简单的接口和逻辑结构来调用这些库。CodeIgniter 可以将需要完成的任务代码量最小化,这样你就可以把更多的精力放到项目的开发上了。
    2014-06-06

最新评论