简单谈谈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管理系统都有这个功能。
    2009-07-07
  • php使用正则验证密码字段的复杂强度原理详细讲解

    php使用正则验证密码字段的复杂强度原理详细讲解

    密码涉及到安全问题,所以密码设计的复杂程序尤为重要。通常密码由大小写字母、数字、特殊符号组成。一般情况下前端可不做js判断,使用ajax提交php后端程序接口,由后端判断后返回json数据,进行用户密码复杂程序提示。
    2022-11-11
  • PHP中使用GD库创建圆形饼图的例子

    PHP中使用GD库创建圆形饼图的例子

    这篇文章主要介绍了PHP中使用GD库创建圆形饼图的例子,本文给出了的代码例子实现了一个扇形统计图,需要的朋友可以参考下
    2014-11-11
  • PHP+MySQL 制作简单的留言本

    PHP+MySQL 制作简单的留言本

    程序安装界面 用于创建数据库、表,以及动态生成config.php文件.
    2009-11-11
  • php小型企业库存管理系统的设计与实现代码

    php小型企业库存管理系统的设计与实现代码

    双专业毕业论文做了一个小型企业库存管理系统,使用PHP&mysql组合进行开发。头一次开发稍微大一点的东西,php也是自学的
    2011-05-05
  • 获取URL文件名后缀

    获取URL文件名后缀

    用php分析URL网址,可以得到文件名、目录路径,还有其它数据,原理就是使用PHP的explode函数分隔字符串。
    2013-10-10
  • 通过PHP简单实例介绍文件上传

    通过PHP简单实例介绍文件上传

    本文通过代码实例给大家介绍php文件上传,获取文件名称、类型、大小等相关信息,完成文件的上传,本文非常具有参考借鉴价值,特此分享到脚本之家平台,供大家学习
    2015-12-12
  • 微信小程序页面向下滚动时tab栏固定页面顶部实例讲解

    微信小程序页面向下滚动时tab栏固定页面顶部实例讲解

    这篇文章主要介绍了微信小程序页面向下滚动时tab栏固定页面顶部实例讲解,文中图文实例讲解的很透彻,有需要的同学可以参考下
    2021-03-03
  • Yii框架扩展CGridView增加导出CSV功能的方法

    Yii框架扩展CGridView增加导出CSV功能的方法

    这篇文章主要介绍了Yii框架扩展CGridView增加导出CSV功能的方法,结合实例形式较为详细的分析了Yii框架扩展组件实现导出CSV格式数据的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • 浅谈PHP匿名函数和闭包

    浅谈PHP匿名函数和闭包

    这篇文章主要介绍了PHP匿名函数和闭包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论