搜尋
首頁php框架ThinkPHPThinkPHP框架SQL操作鍊式寫入原理(淺顯易懂)

下面由thinkphp框架教學欄位來介紹ThinkPHP框架SQL作業鍊式寫法原理,希望對需要的朋友有幫助!

ThinkPHP框架SQL操作鍊式寫入原理(淺顯易懂)

引言

#大家如果有面試幾次不難發現,雖然國產的TP一直被人詬病。但絲毫不能影響它在廣大企業中的發展受到青睞,強大的社區,暴力實用詳細的中文手冊。有一個地方相信大家都不陌生,就是他的鍊式寫法,鍊式寫法的某種程度上簡化了SQL工作量。 OK,是怎麼實現的,那我們從物件導向入手,分析鍊式寫法的實作原理。

如下語句

$User->limit(10)->where('status=1')->select();

程式碼

我們知道,物件導向的方法,可以傳回多種資料類型,當然,也可以回傳物件本身,所以我們可以利用這個特性來實作

<?php
class Test{    
private $var = "";    
public function Func(){        
$this->var = "Var is change";        
return $this;
    }

}

    $obj = new Test();
    var_dump($obj);
    var_dump($obj->Func());

列印出來的結果:

object(Test)[1]  
private &#39;var&#39; => string &#39;&#39; (length=0)
object(Test)[1]  
private &#39;var&#39; => string &#39;Var is change&#39; (length=13)

不難發現:我們私有變數 ##生

########################################################################################################都###了######改######變######。 ######也######就######是######說######,############們# ###########obj->Func(),執行後,傳回了一個帶著###$var### = ###"Var is change"###的物件。 ###
$User->limit(10)->where(&#39;status=1&#39;)->select();
###那麼這個語句就不難理解了。 方法執行後,傳遞物件給下個方法,以此類推。 ######簡單的Select()實作###
<?php    
class UserModel{        
private $field     ="*"; 
        private $tableName ="";        
        private $where     ="";        
        private $order     ="";        
        private $limit     ="";        
        function field($field){            
        $this->field = $field;            
        return $this;
        }        
        function table($tableName){            
        $this->table = $tableName;            
        return $this;
        }        
        function order($order){            
        $this->order = "ORDER BY ".$order;            
        return $this;
        }        
        function where($where){            
        $this->where = "WHERE ".$where;            
        return $this;
        }        
        function limit($index, $limit = 0){            
        $this->limit = "LIMIT ".$index;            
        if($limit){                
        $this->limit.= ",{$limit}";
            }            
            return $this;
        }        
        function select(){            
        if(empty($this->tableName)){                
        $this->tableName = str_replace("Model", "", __CLASS__);//如果表名不指定,则获取类名
            }
            $selectSql ="SELECT {$this->field} 
                         FROM `{$this->tableName}` 
                         {$this->where} 
                         {$this->order} 
                         {$this->limit}"; 
                         //构造SQL语句模版串            
                         echo $selectSql;            
                         //return mysql_query($selectSql);  执行拼接后的SQL语句
        }

    }

    $user = new UserModel();
    $user->where("`user` = 1")->order("`user` DESC")->limit(5)->select();?>
######總結##########思路大概就是透過鍊式運算方法,給SQL語句的各個條件賦值,然後到最後一步統一處理SQL語句。這裡只是簡單地實現下原理,有心的同學可以對方法參數多種類型判斷,更有彈性地賦條件。例如where方法可以傳數組。然後也可以依照這個思路,做例如###INSERT()###,###UPDATE()###,###DELETE()###等等。這裡只是拋磚引玉,如果想更深入了解鍊式寫法,也可以看TP源碼。 ######

以上是ThinkPHP框架SQL操作鍊式寫入原理(淺顯易懂)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!