配列に対するフィルタリング
たぶん他の言語だと、ブロック(処理の塊。ま、PHPだと関数とかメソッドってことでいいか)を
渡してとかで簡単にできるんだろうけど。
PHPだとどうしてもforeachになっちまう。
public function isIgnore($pathname) { $match = false; foreach ($this->ignore as $ignore) { if (preg_match("|{$ignore}|", $pathname)) { $match = true; break; } } return $match; }
foreach 内の処理が関数化できればarray_mapとか使えるのになぁとか思う。
上記の場合だったら、正規表現を渡すと渡した正規表現にマッチするかどうか判断する
関数を作ってくれたりするクラスがあるといいなとか。それがフィルタクラス?
ま、いろいろ問題あるよね。。。処理が別のとこに記述されるので可読性下がるよねとか。。。
class Filter { private static $regexes = array(); public static function regex($regex) { if (!isset(self::regexes[$regex])) { $r = preg_quote($regex); self::regexes[$regex] = create_function("\$pathname", "return (preg_match("/$r/", \$pathname) === 1);'); } return self::regexes[$regex]; } } public function isIgnore($pathname) { $match = array_map(Filter::regex($pathname), $this->ignore); return (0 < count($match)); }