ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP フレームワークにおける SQL 操作のチェーン書き込み方式の原理の簡単な分析

ThinkPHP フレームワークにおける SQL 操作のチェーン書き込み方式の原理の簡単な分析

藏色散人
藏色散人転載
2021-03-31 17:35:401988ブラウズ

thinkphp の次のチュートリアル コラムでは、ThinkPHP フレームワークにおける SQL オペレーション チェーンの記述方法の原理を紹介します。

ThinkPHP フレームワークにおける SQL 操作のチェーン書き込み方式の原理の簡単な分析

#ThinkPHP フレームワークでの SQL 操作チェーン記述の原理の簡単な分析はじめに

もしあれば いくつかのインタビューの後、国内のTPは常に批判されてきたが、それを見つけるのは難しいことではありません。しかし、これは大部分の企業の開発における人気に影響を与えるものではなく、強力なコミュニティと実践的で詳細な中国語マニュアルを備えています。誰もがよく知っていると思いますが、彼の連鎖記述法は SQL ワークロードをある程度簡素化します。さて、それはどのように実装されているのでしょうか? オブジェクト指向から始めて、チェーン書き込みの実装原理を分析しましょう。

次のステートメント

<pre class="brush:php;toolbar:false">$User-&gt;limit(10)-&gt;where('status=1')-&gt;select();</pre>

コード

オブジェクト指向メソッドがさまざまなデータ型を返すことができることはわかっています。もちろん、

を返すこともできます。オブジェクト自体

なので、この機能を使用して <pre class="brush:php;toolbar:false">&lt;?php class Test{ private $var = &quot;&quot;; public function Func(){ $this-&gt;var = &quot;Var is change&quot;;         return $this;     } }     $obj = new Test();     var_dump($obj);     var_dump($obj-&gt;Func());</pre>:

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" を持つオブジェクトを返します。 <pre class="brush:php;toolbar:false">$User-&gt;limit(10)-&gt;where('status=1')-&gt;select();</pre>ということは、この文を理解するのは難しくありません。 メソッドが実行された後、オブジェクトは次のメソッドに渡され、以下同様に続きます。

単純な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 のソース コードを参照してください。

関連する推奨事項:
最新の 10 件の thinkphp ビデオ チュートリアル

以上がThinkPHP フレームワークにおける SQL 操作のチェーン書き込み方式の原理の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。