Heim  >  Artikel  >  Backend-Entwicklung  >  Identitätsobjekt in PHP objektorientiert

Identitätsobjekt in PHP objektorientiert

炎欲天舞
炎欲天舞Original
2017-08-04 17:00:241111Durchsuche


/*
标识对象模式
这个模式主要功能就是创建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(&#39;name&#39;=>&#39;name&#39;,&#39;operator&#39;=>&#39;=&#39;,&#39;value&#39;=>&#39;The Good Show&#39;),
    array(&#39;name&#39;=>&#39;start&#39;,&#39;operator&#39;=>&#39;>&#39;,&#39;value&#39;=>&#39;123456&#39;),   //123456表示time()函数输出的时间戳
    array(&#39;name&#39;=>&#39;start&#39;,&#39;operator&#39;=>&#39;<&#39;,&#39;value&#39;=>&#39;123456&#39;)
}

*/

 

Das obige ist der detaillierte Inhalt vonIdentitätsobjekt in PHP objektorientiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn