CSS Selector Generator | CSS のセレクタ一覧を一発で自動生成!

09

11月2009年

[CakePHP] Set::merge()で、引数が多くなるのを防ぐ

tanaka 22:07 PM

  • はてなブックマークに登録
  • livedoorクリップに登録
  • Yahoo!ブックマークに登録
  • deliciousに追加

読書の秋、ということで週末は割と本を読む時間(と、コーヒー飲んでカフェインの摂取)が充実しているtanakaです。今回も、CakePHPのアプリケーション開発でSetクラスを使った実践テクニックを紹介します。今回はSet::mergeを取り上げます。

引数が増えすぎて困るのを何とかしたい

アプリケーションの開発が進むにつれて、既にあるメソッドに入力を増やして機能を拡張する、というのはよくあることでしょう。入力を増やす典型的な方法は、引数を増やすことです。例えば引数を増やしていって次のようになったと仮定します。

<?php
class Post extends AppModel {
    function search($title='', $tag='', $category='', $comment='', $limit=5, $start=1) {

        // ... 検索実行
    }
}

(一般的には、検索条件をひとまとめの配列にしますのでやや強引な例ですが)さて、この場合、例えばタイトル検索で、10個の記事を取得したい場合は次のように呼び出します。

$this->Post->search($query['title'], '', '', '', 10);

引数を2つ指定したいだけなのに5つも指定しないといけません。また、引数が多すぎると、どの引数がどんな意味を持つのかよくわからなくなってしまいそうですね。

Set::merge()で引数が増えるのを押さえる

こういうときはSet::merge()を使うと引数をスッキリさせることができます。(すでに増えすぎた後だと難しいかも知れませんが…)

<?php
class Post extends AppModel {
    function search($params=array()) {
        $default = array(
            'title' => '',
            'tag' => '',
            'category' => '',
            'comment' => '',
            'limit' => 5,
            'start' => 1,
        );
        $params = Set::merge($default, $params);

        // ... 検索実行
    }
}

このように記述した場合、引数は配列$defaultと同じ形式で指定することになります。ただし$default で指定されている値でかまわない場合は省略できます。例えば、さきほどの、タイトル検索で10件取り出したい場合は

$this->Post->search(array(
    'title' => $query['title'],
    'limit' => 10,
));

という風になります。文字数は若干増えましたが、’tag'と'category', 'comment'の指定が省略できました。さて、この、「引数のデフォルトを用意しつつSet::mergeで上書き」する方法は、理屈がわかれば多用するかもしれません。一歩進んで、次のようにひとまとめに書いてもいいでしょう。

<?php
class Post extends AppModel {
    function search($params=array()) {
        $params = Set::merge(array(
            'title' => '',
            'tag' => '',
            'category' => '',
            'comment' => '',
            'limit' => 5,
            'start' => 1,
        ), $params);

        // ... 検索実行
    }
}

まとめ

メソッドの引数が増えすぎてうんざりしないためにSet::merge()を使うテクニックを紹介しました。このテクニックはModel開発からHelper作成までどこでも役に立ちます。引数をあまり増やしたくないかたのお役に立てれば幸いです。

バシャログスタッフによるWebサイト制作サービス

トラックバック

このエントリーのトラックバックURL
http://c-brains.jp/cgi-bin/mt/###/2049
###はmt-tb.cgiに変更してください。

コメントを投稿

ページの先頭へ

POPULAR TAGS
  • バシャログスタッフによるWebサイト制作サービス

ARCHIVE

特集

RECENT COMMENTS

ishida on CSS Nite in Ginza, Vol.49「バシャログ LIVE」 で紹介したDreamweaverの正規表現クエリーを公開します
>市川さん コメントありがとうございます。 前提条件の部分
ichikawa on 1.2.3で整えるPHP開発環境【STEP.1】 XAMPPをインストール
いつもバシャログ。をご覧いただきありがとうございます。 >
市川 on CSS Nite in Ginza, Vol.49「バシャログ LIVE」 で紹介したDreamweaverの正規表現クエリーを公開します
どういう前提での使用例なのか、わかりませんが、 タグを明示的
studio-8ch on 1.2.3で整えるPHP開発環境【STEP.1】 XAMPPをインストール
いつも記事を大変興味深く、拝見いたしております。 是非、A
sakai on [使える CSS テクニック] CSSで実現するプルダウンメニュー
>とらのすけさん コメントありがとうございます。 CSS