Blog de Gonzalo

BIBLIOTECA SPL DE PHP

La biblioteca SPL de php es un conjunto de interfaces y clases para php que diseñada para recorrer estructuras agregadas: arrays, resultados de bases de datos, árboles XML, directorios, etc...
SPL trabaja con iteradores. Un iterador es simplemente un objeto que recorre una lista. La biblioteca viene con un gran listado de clases ycon la función función _splclasses se pueden ver todas las que hay disponibles. Los iteradores realizan la misma función que cuando se recorren arrays y tienen como mejora que pueden albegar una gran cantidad de datos y organizarlos más eficientemente. Los iteradores también facilitan el lazy loading, es decir, devuelven los datos sólo cuando se necesita. También se pueden manipular los datos antes de devolverlos al usuario y es conveniente usarlos para grandes volúmenes de datos.

ArrayIterator

El constructor de la clase ArrayIterator recibe un array como parámetro y proporciona métodos con los que iterar mediante el objeto creado:

$coches = ['Ford', 'Renault', 'Peugeot', 'Citroen', 'Fiat'];
// Se crea un nuevo ArrayIterator y se pasa el array
$iterador = new ArrayIterator($coches);
foreach ($iterador as $key => $value) {
    echo $key . ':  ' . $value . '
'; } $animales = [ 'perro' => ['Sparky'], 'gato' => ['Bear'], 'liebre' => ['Bunny'], 'toro' => ['Hunk'], 'conejo' => 'Juliet' ]; $iterador = new RecursiveArrayIterator($animales); foreach(new RecursiveIteratorIterator($iterador) as $key => $value) { echo $key . ': ' . $value . '
'; }

DirectoryIterator

Para recorrer directorios y sus archivos en PHP ya existen funciones específicas como scandir o glob, pero también es posible utilizar DirectoryIterator.

// Se crea un nuevo objeto DirectoryIterator
$directorio = new DirectoryIterator(__DIR__.'/Web/common');
foreach ($directorio as $item) {
    echo $item;
}

Estos los más comunes hay otros más..Espero que os haya interesado.

SplFileObject

La clase SplFileObject ofrece una interfaz orientada a objetos para manejar ficheros.

$file = new SplFileObject('monolog.php', 'r');

// iterate over its contents
while (!$file->eof()) {
    // get the current line
    $line  =  $file->fgets();
    echo $line:
    // trim it, and then check if its empty
    if (empty(trim($line))) {
        // skips the current iteration
        continue;
    }
}