PHPで関数型
- 2007-05-26
- カテゴリ: Server Side
- タグ: PHP Tips
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

