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