簡單談談PHP面向?qū)ο笾畼俗R對象
更新時間:2017年06月27日 10:18:01 投稿:jingxian
下面小編就為大家?guī)硪黄唵握務凱HP面向?qū)ο笾畼俗R對象。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
標識對象模式
這個模式主要功能就是創(chuàng)建sql語句中的wehre條件字符串的,下面直接看代碼和注釋:
namespace woo\mapper;
//字段對象
class Field {
protected $name = null; //字段名稱
protected $operator = null; //操作符
protected $comps = array(); //存放條件的數(shù)組
protected $incomplete = false; //檢查條件數(shù)組是否有值
function __construct ($name){
$this->name= $name;
}
//添加where 條件
function addTest($operator,$value){
$this->comps[] = array('name'=>$this->name,'operator'=>$operator,'value'=>$value);
}
//獲取存放條件的數(shù)組
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條件數(shù)組
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);
//輸出類似下面的內(nèi)容
/*
array{
array('name'=>'name','operator'=>'=','value'=>'The Good Show'),
array('name'=>'start','operator'=>'>','value'=>'123456'), //123456表示time()函數(shù)輸出的時間戳
array('name'=>'start','operator'=>'<','value'=>'123456')
}
*/
以上這篇簡單談談PHP面向?qū)ο笾畼俗R對象就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
php小型企業(yè)庫存管理系統(tǒng)的設計與實現(xiàn)代碼
雙專業(yè)畢業(yè)論文做了一個小型企業(yè)庫存管理系統(tǒng),使用PHP&mysql組合進行開發(fā)。頭一次開發(fā)稍微大一點的東西,php也是自學的2011-05-05

