PHPで関数型

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PHPで関数型

PHPで無名関数を作ってくれるcreate_function()。こいつの便利さに最近ようやく気づいた。

PHPで開発してると、些細なんだけど頻繁に出てくる処理っていうのがあるわけで。例えば↓みたいなの。

$in['name'] = (isset($_POST['name']) && ($_POST['name'] != ''))
              ? $_POST['name']
              : '名無し';

こういうつまらない処理のために新しい関数を書くのはためらわれる。

function getPostVar($key, $defaultValue = null) {
    return (isset($_POST[$key]) && ($_POST[$key] != ''))
           ? $_POST[$key]
           : $defaultValue;
}

/* getPostVarがないとこのクラスが動かなくなる! */
class DependentClass {
    public function method() {
        $name = getPostVar('name', '名無し');
    }
}

できる限りクラスは独立させたいわけで、こんなつまんない処理で独立できなくなるのは切ない。かといって、privateメソッドとして実装するのも微妙。

class IndependetClass {
    /**
     * これは$_POSTから値を取得するメソッドですよー
     * みたいなコメント書くのも面倒くさい。
     */
    private function getPostVar($key, $defaultValue = null) {
        return (isset($_POST[$key]) && ($_POST[$key] != ''))
               ? $_POST[$key]
               : $defaultValue;
    }

    public function method() {
        /* わざわざ$this->つけるのも面倒だし */
        $name = $this->getPostVar('name', '名無し');
    }
}

そんなときに活躍するのがcreate_function()なわけで。

class FunctionCreator {
    public function method() {
        /* 完全に使い捨て感覚 */
        $f = create_function('$k, $d',
                'return (isset($_POST[$k]) && ($_POST[$k] != "")) ? $_POST[$k] : $d;');

        $name = $f('name', '名無し');
    }
}

ほぼローカル空間しか汚さないから適当にコード書けるしね。使い捨て万歳。

これでクロージャとか使えたらなー

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/10-2c2e8c44

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。