?

Log in

No account? Create an account
tech

SPL Directory Iterator

Весьма поучительная проблема. Спасибо ezdakimak, что споткнулся :) По существу там последний комментарий только -- next(), current(), prev() возвращают не новый итератор, а один и тот же объект с промотанным внутренним состоянием.

UPD Поскольку я с SPL пока только по мануалу знакомлюсь, я допустил ляп:
возвращает только current, а prev() нету в интерфейсе spl-итератора.

Comments

На сколько я понял, возвращает только current, а valid, next и key только с указателями работают (prev вообще не предусмотрено). То есть процесс для foreach выглядит примерно так, на сколько я понял:

У двух примеров ниже эффект должен быть одинаковый:
$arr=new DirectoryIterator('./');

$arr->rewind();
while($arr->valid()){
 echo $arr->key().': '.$arr->current().'
'; $arr->next(); } foreach($arr as $key=>$val){ echo $key.': '.(string)$val.'
'; }
Угу, все правильно. А current возвращает $this.

Думаю, что для сортируемого списка директории лучше написать какой-нибудь свой SPL-Compatible итератор, пользуясь readdir().
О, а вот тут наверное самый ОО-каноничный путь сделать сортируемый итератор:

в комментарии к документации:
http://php.net/manual/en/function.DirectoryIterator-isFile.php
Прямо почти твой случай
Угу, похоже.
Эх, мне сейчас радость будет — разбираться в PHP´ых системах журналирования.