ThinkPHP などのさまざまなフレームワークにおける SQL 操作チェーン記述の原理の簡単な分析

韦小宝
リリース: 2023-03-20 09:12:01
オリジナル
1879 人が閲覧しました

チェーン操作は多くの人にとって謎に思えますが、実際、この記事を読むと、チェーン操作が徐々に理解できるようになります。私たちは ThinkPHP のコアを深く掘り下げ、ThinkPHP や他のフレームワークのチェーン操作を研究します。一つのことを知っていれば、他のこともすべて知ることができます。

ThinkPHP、非常に強力なコミュニティ、実践的で詳細な中国語マニュアルを備えています。誰もがよく知っていると思いますが、チェーン書き込みメソッドは 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)
ログイン後にコピー

見つけるのは難しくありません: プライベート変数 $var が変更されました。つまり、$obj->Func() は、実行後、$var = "Var ischange" のオブジェクトを返します。

$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}"
                         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 の下部にある DB.php に基づいてデータベース カプセル化クラスを変更しました

ThinkPHP を学習したため、ThinkPHP の下部にある DB.php に基づいてデータベース カプセル化クラスを変更しましたフレームワーク、いいえ、データベースの動作を自分で見に行っただけです...

thinkPHP WeChat Sharing Interface JSSDK Exampleの説明

この記事では主にthinkPHP WeChat Sharing Interface JSSDKの使い方を紹介し、thinkPHPのチューニングを次の形式で分析します。例の ..

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!