ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP フレームワーク SQL 操作チェーンの記述原理 (わかりやすい)

ThinkPHP フレームワーク SQL 操作チェーンの記述原理 (わかりやすい)

藏色散人
藏色散人転載
2020-08-01 13:35:462222ブラウズ

thinkphp フレームワークの次のチュートリアル コラムでは、ThinkPHP フレームワークの SQL 操作チェーンの記述方法の原理を紹介します。

ThinkPHP フレームワーク SQL 操作チェーンの記述原理 (わかりやすい)

はじめに

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

次のステートメント

$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 中国語 Web サイトの他の関連記事を参照してください。

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