phpコヒーレント操作の実装
一部のフレームワーク (ThinkPHP など) を使用してコーディングする場合、このようなコードをよく使用します。
M('ユーザー')->where(配列('id'=>1))->フィールド('名前')->select();
これはコーディングに役立つだけでなく、人々に「幸せな気分」をもたらします。さて、これ以上言うことはありません。やり方を見てみましょう?
//データベース操作基本クラス[追記:メイン関数コヒーレント関数実装]
クラス DB{
//この属性は、一貫した操作を実現するためのメソッド名を定義します
public $sql = array(
"フィールド" => "",
「どこ」 => 「」、
「注文」=>「」、
"制限" => "",
"グループ" => "",
「持っている」=>「」、
);
/**
* 連続した操作の場合は、field() where() order() limit() group() getting() メソッドを呼び出して SQL ステートメントに結合します
※このメソッドはPHPのマジックメソッドです
クラスに存在しないメソッドを呼び出すと自動的に呼び出されます。
* @param $methodName 存在しないメソッドを呼び出す場合、メソッド名の文字列を受け取ります
* @param $args 存在しないメソッドを呼び出す場合、そのメソッドのパラメータを配列で受け取ります
*/
function __call($methodName,$args){
//リクエストされたメソッド名を小文字に変換します
$methodName=strto lower($methodName);
//リクエストメソッド名がメンバー属性配列の$sql添字に対応する場合、2番目のパラメータを配列内の「添字に対応する要素」に割り当てます
;
if(isset($this->sql[$methodName])){
$this->sql[$methodName]=$args[0];
}その他{
echo '呼び出しクラス '.get_class($this).' の '.$methodName.'() メソッドが存在しません';
}
// オブジェクトを返します。これにより、このオブジェクト内のメソッドを引き続き呼び出して一貫した操作を形成できます
$this を返します;
}
/**
* このメソッドを使用して select SQL ステートメントに結合します。[PS: このメソッドは連続操作を終了し、連続操作の最後に配置されます]
*/
関数 select(){
//sql 文字列を選択構文に従って結合します [追記: mysql コマンドラインで「help select;」を実行すると構文構造を表示できます]
$sql="SELECT {$this->sql['field']} FROM テスト {$this->sql['where']} {$this->sql['group']} {$this- >sql['having']} {$this->sql['order']} {$this->sql['limit']}";
エコー $sql;
}
}
$obj=新しいデータベース();
$obj->field('名前,性別,住所')->where('where name="guoyu"')->limit('limit 1')->select();
//出力: SELECT 名前、性別、住所 FROM test where name=guoyulimit 1
http://www.bkjia.com/PHPjc/986703.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/986703.html技術記事 PHP の一貫した操作の実装 いくつかのフレームワーク (ThinkPHP など) を使用してコーディングする場合、このようなコードを使用することがよくあります。 M(User)-where(array(id=1))-field(name)-select(); これはコーディングに役立つだけではありません...