チェーン操作は多くの人にとって謎に思えますが、実際、この記事を読むと、チェーン操作が徐々に理解できるようになります。私たちは 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 'var' => string ''
(length=0)object(Test)[1]
private 'var' => string 'Var is change'
(length=13)
見つけるのは難しくありません: プライベート変数 $var が変更されました。つまり、$obj->Func() は、実行後、$var = "Var ischange" のオブジェクトを返します。
$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}" 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 サイトの他の関連記事を参照してください。