イテレータ

イテレータ

デザインパターンの一つ。反復作業を行う時に重宝する。

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 を参考に作成)。

イテレータの側(オブジェクト側)に情報を持つことで、呼び出し側は詳細な実装を気にせずに処理を行うことができる。

タグ

トラックバック&コメント

この記事のトラックバックURL:

まだトラックバック、コメントがありません。

コメントを投稿する

コメントを投稿するためには ログインしてください。


»
«