RecursiveFilterIterator版PINDでSubPathname表示
id:balibali:20080515:1210876616 のつづき。
結果が相対パスじゃなくなっていたので修正。なんか場当たり対応なのでもっと上手く書ける気がする。
@@ -65,18 +65,21 @@ } if ($result) { - echo $color->convert("%G{$path}%n\n{$result}\n"); + $subPath = $iterator->getSubPathname(); + echo $color->convert("%G{$subPath}%n\n{$result}\n"); } } class PindRecursiveFilterIterator extends RecursiveFilterIterator { private $patterns; + private $subPath; - function __construct($path, $patterns = array()) + function __construct($path, $patterns = array(), $subPath = '') { parent::__construct(new RecursiveDirectoryIterator($path)); $this->patterns = $patterns; + $this->subPath = $subPath; } function accept() @@ -104,6 +107,16 @@ function getChildren() { - return new PindRecursiveFilterIterator($this->key(), $this->patterns); + return new PindRecursiveFilterIterator($this->key(), $this->patterns, $this->getSubPathname()); + } + + function getSubPathname() + { + if ($this->subPath) { + $subPath = $this->subPath . DIRECTORY_SEPARATOR . $this->getInnerIterator()->getFilename(); + } else { + $subPath = $this->getInnerIterator()->getFilename(); + } + return $subPath; } }
機能しなくなっていた RecursiveDirectoryIterator::getSubPathname() メソッドをオーバーライドしてなんとか対応(getSubPath() もやれよって感じだがまあ)
あ、待てよ、これって継承してないっぽいからオーバーライドじゃないかも。んんーなんか混乱してきたけど今日は眠いので寝る。