個人的な理解: いわゆるエレガントなプログラミングとは、コーヒーを飲み、キーボードに触れ、ビジネスについて考えることを意味します。 エレガントなコードの定義は次のとおりです。 1. 単一引用符と二重引用符はできるだけ使用しないでください。 3. 完全な名前付けこれは最も基本的な英語の単語です。 5. アプリケーションのコードは明確に整理され、使用頻度が低くなります。ネットワーク関係。
以下は SQL クエリの一貫した操作を実装する方法です。ご指導をお願いします。
- /**
- * DB コヒーレント操作、SQL 条件付き構築
- * From: EQPHP FrameWork
- * 著者: art_youth
- * E-mail: 258122391@qq.com
- * 公開データ: 2012-11-09
- */
- class query{
- public $sql='';
- public $option=array();
- static $keyword=array('select ','from','where','group','having','order','limit');
- //初化查询パラメータ
- function __construct($table,$prefix=''){
- $this->option['from']=$prefix.$table;
- }
-
-
- //构造パラメータ
- function __call($method,$param){
- if (in_array($method,self::$キーワード)) {
- $this->option[$method]=$param[0];
- return $this;
- }
- }
-
-
- //出查询结果
- function out($mode='sql', $rs_count=0,$now_page=1,$page_size=20){
- $this->sql='';
- foreach (self::$keyword as $key) {
- $value=($key == 'グループ' || $key == '順序') ? $key.' by' : $key;
-
- if ($key === 'where' && is_array($this->option['where'])) {
- $this->option['where']=self: :condition($this->option['where']);
- }
-
- if (isset($this->option[$key]) &&rim($this->option[$key])) {
- $this->sql.=' '.$value.' '.trim($this->option[$key]);
- }
-
- unset($this->option[$key]);
- }
- $this->sql=trim($this-> ;sql);
-
- switch($mode){
- case 'rs':
- return db::rs($this->sql);
- case 'list':
- return db::rs_list($this-> ;sql);
- case 'page':
- return db::page_list($this->sql,$rs_count,$now_page,$page_size);
- デフォルト:
- return $this->>sql;
- }
- }
-
-
- //構造sql查询条件
- static functioncondition($data){
- //处理逻辑连接符
- $logic=' and ';
- if (isset($data['logic'])) {
- $ロジック=' '.$data['ロジック'].' ';
- unset($data['logic']);
- }
-
- //处理字符串(本生sql)
- if (isset($data['query'])) {
- $condition[]=' ('.$data['query'].')';
- unset($data['query']);
- }
-
- //処理条件データ
- foreach ($data as $key=>$value) {
- $condition[]='('.self::parse_expression($key,$value).')';
- }
-
- return implode($logic,$condition);
- }
-
-
- // 解析表达式
- private static function parse_expression($key,$value){
- if (is_numeric($value)) return $key.'='.$value;
- if (is_string($value)) return $key.'= '.$value.'"';
-
- if (is_array($value)) {
- //基本条件查询
- if (preg_match('/^(eq|neq|gt|egt|lt|elt)$/i ',$value[0])) {
- is_string($value[1]) && $value[1]='"'.$value[1].'"';
- $operator=array('eq'= >'=','neq'=>'<>','gt'=>'>','egt'=>'>=','lt'=>'< ;','elt'=>'<=',);
- return $key.$operator[$value[0]].$value[1];
- }
- //in范围查找
- if ( in_array($value[0],array('in','not in'))) {
- is_array($value[1]) && $value[1]=implode(',',$value[1]) ;
- $key を返します。 '.$value[0].'('.$value[1].')';
- }
- //区間间查找
- if (in_array($value[0],array('間','not between'))) {
- $param=is_string($value[1]) ? explode(',',$value[1]) : $value[1];
- $key を返します。 '.$value[0].' '.$param[0].' and '.$param[1];
- }
- //like模糊適合
- if (in_array($value[0],array('like','not like'))) {
- if (is_array($value) [1])) {
- $buffer=array();
- foreach ($value[1] as $param) {
- $buffer[]=$key.' '.$value[0].' "'.$param.'"';
- }
- $logic=isset($value[2]) ? ' '.$value[2].' ' : ' または ';
- return implode($logic,$buffer);
- }
- if (strpos($key,'|') !== false) {
- $buffer=array();
- foreach (explode ('|',$key) as $field) {
- $buffer[]='('.$field.' '.$value[0].' "'.$value[1].'")';
- }
- return implode(' or ',$buffer);
- }
- if (strpos($key,'&') !== false) {
- $buffer=array();
- foreach (explode('&',$key) as $field) {
- $buffer[]= '('.$field.' '.$value[0].' "'.$value[1].'")';
- }
- return implode(' and ',$buffer);
- }
- $key を返します。 '.$value[0].' "'.$value[1].'"';
- }
- //数学区间查询(1,9)/[2,3)
- if ($value[0] === 'extent') {
- $logic=isset($value[2]) ? ' '.$value[2].' ' : ' && ';
- $operator=array('('=>'>','['=>'>=',')'=>'<',']'= >'<=');
- preg_match('/^((|[)(.*),(.*)()|])$/',$value[1],$param);
- $ result='';
- isset($param[2]) && $result.=$key.$operator[$param[1]].$param[2];
- isset($param[4]) && $result .=$logic.$key.$operator[$param[4]].$param[3];
- return $result;
- }
- return '';
- }
- }
- //资源回收
- 関数__destruct(){
- unset($this->option,$this->sql);
- }
-
-
- }
复制代码
|