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;
}
Дополнительный материал: