Сейчас очень много работаю с SPL классами в PHP. Честно говоря, работать с ними не всегда удобно. Сегодня наткнулся на проблему с указателями в DirectoryIterator. Ее суть хорошо отражает следующий код.
$dirTree = new DirectoryIterator("/testDir"); // Допустим в директории файлы a.php и b.php
$items = array();
foreach($dirTree as $item) {
if ($item->isDir()) {
$items[] = $item;
echo $item->getFilename(); // Здесь все ок - сначало выводится a.php, затем b.php
}
}
$firstElement = $items[0];
var_dump($firstElement->getFilename()); // вот здесь выводится пустая строка, а я ожидал что будет ‘a.php’
Базовые понятия
Итераторы (Iterators) — это классы которые реализуют интерфейс Iterator. Реализация данного интерфейса необходима при организации доступа к циклическим структурам (массивы, списки и т.д.).
В () существует большое количество готовых классов, реализующих интерфейс Iterator.
Далее перечислены классы, которые непосредственно реализуют интерфейс Iterator: Traversable, IteratorAgregate, OuterIterator, RecursiveIterator. Остальные классы-итераторы SPL наследуют свои интерфейсы уже от них.
SPL — это набор стандартных библиотек PHP (Standard PHP Library) появившихся начиная с 5-ой версии PHP.
Если рассматривать SPL с позиции разработчика, то легко выделить шесть основных классов и интерфейсов, функционал которых расширяется в большом множестве классов-потомков.