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

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

藏色散人
リリース: 2021-04-01 08:52:04
転載
1989 人が閲覧しました

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

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

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

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

次のステートメント

<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$User-&gt;limit(10)-&gt;where('status=1')-&gt;select();</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>

コード

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

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

なので、この機能を使用して <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div>:

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

単純な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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート