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

2018-09-07 12:29

阅读:452

  标识对象模式

  这个模式主要功能就是创建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面向对象之标识对象就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。


评论


亲,登录后才可以留言!