イテレータ
デザインパターンの一つ。反復作業を行う時に重宝する。
SPL(標準PHPライブラリ)の Iterator にフィルタイテレータを適用する例。
class FileIterator extends FilterIterator {
public function __construct($iterator) {
parent::__construct($iterator);
}
public function accept() {
$file = $this->current();
$filepath = pathinfo($file);
if ( strtolower($filepath['extension']) === 'jpg' ) { // 拡張子のチェック
$imginfo = getimagesize($file->getPathname());
if ( $imginfo[2] == IMAGETYPE_JPEG ) { // 画像タイプのチェック
return true;
} else {
return false;
}
} else {
return false;
}
}
}
上記例では、ファイル拡張子を取得し、jpg であれば、さらにファイルタイプをチェックする(徳丸浩著体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 4-12 を参考に作成)。
イテレータの側(オブジェクト側)に情報を持つことで、呼び出し側は詳細な実装を気にせずに処理を行うことができる。
タグ
2011年10月29日 コメント&トラックバック(0) | トラックバックURL |
カテゴリ: デザインパターン
トラックバック&コメント
この記事のトラックバックURL:
まだトラックバック、コメントがありません。