Heim > Backend-Entwicklung > PHP-Tutorial > Eine kurze Analyse des Prinzips des SQL-Operationskettenschreibens in verschiedenen Frameworks wie ThinkPHP

Eine kurze Analyse des Prinzips des SQL-Operationskettenschreibens in verschiedenen Frameworks wie ThinkPHP

韦小宝
Freigeben: 2023-03-20 09:12:01
Original
1911 Leute haben es durchsucht

Der Kettenbetrieb erscheint vielen Menschen rätselhaft. Tatsächlich werden Sie nach dem Lesen dieses Artikels nach und nach den Kettenbetrieb verstehen. Wir gehen tief in den Kern von ThinkPHP ein und untersuchen die Kettenoperationen von ThinkPHP und anderen Frameworks. Solange Sie eines wissen, wissen Sie auch alles andere.

ThinkPHP, mit einer sehr starken Community, praktischem und detailliertem chinesischem Handbuch. Ich glaube, dass jeder mit seiner Kettenschreibmethode vertraut ist. Die Kettenschreibmethode vereinfacht die SQL-Arbeitsbelastung bis zu einem gewissen Grad. OK, wie wird es implementiert? Beginnen wir mit der objektorientierten Implementierung und analysieren wir das Implementierungsprinzip des Kettenschreibens.

Die folgende Aussage:

$User->limit(10)->where('status=1')->select();
Nach dem Login kopieren
Nach dem Login kopieren

Code:

Wir wissen, dass objektorientierte Methoden natürlich mehrere Datentypen zurückgeben können Das Objekt selbst kann zurückgegeben werden, sodass wir diese Funktion verwenden können, um

<?php
class Test{  
  private $var = "";
  public function Func(){
        $this->var = "Var is change";
        return $this;
    }}    
    $obj = new Test();
    var_dump($obj);
Nach dem Login kopieren
 var_dump($obj->Func());
Nach dem Login kopieren

Das gedruckte Ergebnis zu implementieren:

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

Es ist nicht schwer zu finden: Unsere private Variable $var hat sich geändert. Mit anderen Worten: Unser $obj->Func() gibt nach der Ausführung ein Objekt mit $var = „Var ist Änderung“ zurück.

$User->limit(10)->where(&#39;status=1&#39;)->select();
Nach dem Login kopieren
Nach dem Login kopieren

Dann ist diese Aussage nicht schwer zu verstehen. Nachdem die Methode ausgeführt wurde, wird das Objekt an die nächste Methode übergeben und so weiter.

Einfache Select()-Implementierung

<?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}"
                         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();
?>
Nach dem Login kopieren

Zusammenfassung

Die Idee besteht wahrscheinlich darin, die Kettenoperationsmethode zu verwenden, um jeder Bedingung der SQL-Anweisung Werte zuzuweisen. und vereinheitlichen Sie es dann im letzten Schritt SQL-Anweisungen verarbeiten. Dies ist nur eine einfache Umsetzung des Prinzips. Interessierte Studierende können mehrere Arten von Methodenparametern beurteilen und Bedingungen flexibler zuweisen. Beispielsweise kann die Methode where ein Array übergeben. Dann können Sie dieser Idee auch folgen und Dinge wie INSERT(), UPDATE(), DELETE() usw. tun. Dies ist nur eine Einführung. Wenn Sie mehr über das Schreiben von Ketten erfahren möchten, können Sie sich auch den TP-Quellcode ansehen.

Verwandte Empfehlungen:

Eine Paketklasse für die Datenbank, die ich basierend auf DB.php unten in ThinkPHP geändert habe

Basierend auf: Die DB.php unten in ThinkPHP wurde von mir geändert, um die Datenbank zu kapseln. Da ich nicht weiß, wie man das ThinkPHP-Framework erlernt, habe ich mir die Datenbankoperationen selbst angesehen...

Beispielerklärung für die thinkPHP WeChat-Freigabeschnittstelle JSSDK

Dieser Artikel stellt hauptsächlich die Verwendung der thinkPHP WeChat-Freigabeschnittstelle JSSDK vor und analysiert die Optimierung von thinkPHP in Form von Beispielen...

Das obige ist der detaillierte Inhalt vonEine kurze Analyse des Prinzips des SQL-Operationskettenschreibens in verschiedenen Frameworks wie ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage