11

私はクラスメソッドをチェーンする方法を知っています(「return $this」とすべてを使用)が、私がやろうとしているのは、スマートな方法でそれらをチェーンすることです。これを見てください:

$albums = $db->select('albums')->where('x', '>', '20')->limit(2)->order('desc');

このコード サンプルから理解できることは、最初の 3 つのメソッド (select、where、limit) が実行されるクエリ ステートメントを作成し、最後のメソッド (order) がステートメントを終了してから実行し、それをスローすることです。結果ですよね?

しかし、これは当てはまりません。なぜなら、これらのメソッドのいずれか (もちろん「選択」を除く) を簡単にドロップしたり、さらに重要なことに、それらの順序を変更したりしても、何も問題が発生しないからです !! つまり、メソッド「select」が作業を処理しますよね?次に、メソッド「select」がすでに呼び出された後、他の3つのメソッドがクエリステートメントにどのように追加/影響するか!??

4

3 に答える 3

0

selectメソッドが好きで、order_byその時点までの情報を保存するだけで、実際のクエリを開始するメソッドが必要になるでしょう。

ただし、 Iteratorインターフェースを実装し、クエリを初めて実行するrewindか、currentヒットした場合 (考えてくださいforeach)、またはCountableを使用すると、これを暗黙的にすることができるためcount()、オブジェクトを呼び出して結果カウントを生成できます。私は個人的に、このように構築されたライブラリを使用したくありません。クエリが実行される場所を確認できるように、明示的な呼び出しを高く評価する可能性が高くなります。

于 2013-07-01T19:53:11.823 に答える