個人理解: 所謂優雅程式就是喝著咖啡,摸著鍵盤,想著業務; 優雅程式碼的定義是: 1、盡可能的少單雙引號; 2、不要嵌套; 3、命名全是最基本的英文單字; 4、程式碼像英文一樣,是一段一段的; 5、一個應用程式碼組織調理清晰,最好是樹關係,網關係少用。
下邊是一個sql查詢的連貫操作實現方法,請大家指導指導!
- /**
- * DB連貫運算、sql條件建構
- * From: EQPHP FrameWork
- * Author: art_youth
- * E-mail: 258122391@qq.com
- * E-mail: 258122391@qq.com
- * Pub data: 20112-120112 09
-
- */
-
- 類別查詢{
-
- 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::$keyword)) {
- if (in_array($method,self::$keyword)) {
- $this->option[$method]=$param[0];
- return $this;
- }
- }
-
-
- // 輸出查詢結果
- function out($mode='sql',$rs_count=0,$now_page=1,$page_size=20){
- $this->sql='';
- foreach (self::$關鍵字作為$ key) {
- $value=($key == 'group' || $key == 'order') ? $鑰匙。 by' : $key;
-
- if ($key === 'where' && is_array($this->option['where'])) {
- $this->option[' where' ]=self::condition($this->option['where']);
- }
-
- if (isset($this->option[$key]) && 修剪( $this-> option[$key])) {
- $this->sql.=' '.$value.' '.trim($this->選項[$key]);
- }
-
- unset($this->選項[$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);
- default:
- return $this->sql;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
-
- //建構sql查詢條件
- static function condition($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 '=>'' 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('之間','不在之間'))) {
- $param=is_string($value[1]) ? explode(',',$value[1]) : $value[1];
- 回傳$key。 ' '.$值[0]。 ' '.$參數[0]。 ' and '.$param[1];
- }
-
- //like 模糊匹配
- if (in_array($value[0],array('喜歡','不喜歡')) ) {
- if (is_array($value[1])) {
- $buffer=array();
- foreach ($value[1] as $param) { $buffer[]= $鑰匙。 ' '.$值[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(' 或',$buffer); }
-
- if (strpos($key,'&') !== false) {
- $buffer=array();
- foreach (explode('&',$key) as $field ) {
- $buffer[]='('.$field.' '.$value[0].' "'.$value[1].'")';
- }
- 返回內爆(' 和',$buffer);
- }
-
-
- 回傳$key。 '.$值[0]。 ' "'.$value[1].'"';
- }
-
- // 數學區間查詢(1,9)/[2,3)
- if ($value[0] = == '範圍') {
- $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 '';
- }
- }
-
-
- //資源回收
- function __destruct(){
- unset($this->option,$this-> ;sql);
- }
-
-
- }
複製程式碼
|