Heim >PHP-Framework >Denken Sie an PHP >Eine kurze Analyse des Prinzips der Kettenschreibmethode von SQL-Operationen im ThinkPHP-Framework

Eine kurze Analyse des Prinzips der Kettenschreibmethode von SQL-Operationen im ThinkPHP-Framework

藏色散人
藏色散人nach vorne
2021-03-31 17:35:401989Durchsuche

Die folgende Tutorial-Kolumne von thinkphp wird Ihnen das Prinzip des SQL-Operationskettenschreibens im ThinkPHP-Framework vorstellen. Ich hoffe, es wird Freunden in Not hilfreich sein!

Eine kurze Analyse des Prinzips der Kettenschreibmethode von SQL-Operationen im ThinkPHP-Framework

Einführung

Wenn Sie mehrere Interviews geführt haben, ist es nicht schwer, dies herauszufinden, obwohl inländische TP immer kritisiert wurde . Dies hat jedoch keinen Einfluss auf seine Beliebtheit bei der Entwicklung der meisten Unternehmen. Es verfügt über eine starke Community und ein praktisches und detailliertes chinesisches 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 Anweisung

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

Code

Wir wissen, dass die objektorientierte Methode mehrere Datentypen zurückgeben kann. Natürlich kann sie auch das Objekt selbst zurückgeben, sodass wir diese Funktion verwenden können erreichen 对象自身,所以我们可以利用这个特性来实现

<?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 'var' => string '' (length=0)
object(Test)[1]
  private 'var' => string 'Var is change' (length=13)

不难发现:我们私有变量$var发生了改变。也就是说,我们$obj->Func(),执行后,返回了一个带着$var = "Var is change"的对象。

$User->limit(10)->where('status=1')->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()rrreee

Das gedruckte Ergebnis:
rrreee
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 is change" zurück.
rrreee

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

rrreee
Zusammenfassung
🎜Die Idee besteht darin, verschiedenen Bedingungen der SQL-Anweisung über die Kettenoperationsmethode Werte zuzuweisen und die SQL-Anweisung dann im letzten Schritt einheitlich zu 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 beispielsweise INSERT(), UPDATE(), DELETE() usw. ausführen. 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: 🎜Die neuesten 10 Thinkphp-Video-Tutorials🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonEine kurze Analyse des Prinzips der Kettenschreibmethode von SQL-Operationen im ThinkPHP-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen