SPL добавляет в PHP новые возможности ООП для работы с :
PHP поддерживает SPL начиная с версии 5.2.1.
Примеры использования некоторых новых классов и интерфейсов:
ArrayIterator - позволяет создать итератор из любого массива:
$arr = array('a','b','c'); $iterator = new ArrayIterator($arr); foreach($iterator as $val) { echo $val; }
LimitIterator - задание границ для итератора, первый параметр – массив, второй – индекс первого элемента, третий – количество элементов
$arr = array(1,2,3,4,5,6,7,8,9); $arrIterator = new ArrayIterator($arr); $limitIterator = new LimitIterator($arrIterator, 3, 4); foreach($limitIterator as $number) { echo $number; }
AppendIterator - объединяет два итератора
$arrFirst = new ArrayIterator(array(1,2,3)); $arrSecond = new ArrayIterator(array(4,5,6)); $iterator = new AppendIterator(); $iterator->append($arrFirst); $iterator->append($arrSecond); foreach($iterator as $number) { echo $number; }
FilterIterator - фильтр по вычисляемому значению
class GreaterThanThreeFilterIterator extends FilterIterator { public function accept() { return ($this->current() > 3); } } $arr = new ArrayIterator(array(1,2,3,4,5,6)); $iterator = new GreaterThanThreeFilterIterator($arr); print_r(iterator_to_array($iterator));
RegexIterator - филтр по regexp значения
$arr = array('apple','avocado', 'orange', 'pineapple'); $arrIterator = new ArrayIterator($arr); $iterator = new RegexIterator($arrIterator, '/^a/'); print_r(iterator_to_array($iterator));
SPL также предоставляет возможность для управления содержимым файлов и списком директорий.
Получение свойств файла
$fileName = '/path/to/file/filename.php'; $fileInfo = new SPLFileInfo($fileName); $fileInfo->getPath(); $fileInfo->getSize(); $fileInfo->isFile(); $fileInfo->isDir();
Просмотр содержимого директории:
DirectoryIterator $pathName = '/path/to/iterate/'; foreach(new DirectoryIterator($pathName) as $fileInfo) { echo $fileInfo . " "; }
Рекурсивный просмотр содержимого директории:
RecursiveDirectoryIterator $pathName = '/path/to/root/dir/'; $i = new RecursiveDirectoryIterator($pathName); foreach(new RecursiveIteratorIterator($i) as $fileInfo) { echo $fileInfo . " "; }
Построчная итерация по файлу:
$it = new SplFileObject('pm.csv'); foreach($it as $line) { echo $line; }
Дополнительный материал: