标识对象模式
这个模式主要功能就是创建sql语句中的wehre条件字符串的,下面直接看代码和注释:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
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面向对象之标识对象就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。