Standard PHP Library (SPL) PHP 19.06.2009

php_spl.png SPL добавляет в PHP новые возможности ООП для работы с :

  • итераторами;
  • новые виды исключений;
  • перегрузка (overloading) массивов,
  • расширенное управление XML, файлами и данными
  • паттерн Наблюдатель, интерфейс Исчисления (counting)
  • автоматическая загрузка классов и интерфейсов

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;
}

Дополнительный материал:

Цитата
Человек может многое, может все и еще столько же!
Даниил Гранин
Категории
Архив