No eres un desarrollador Senior si no sabes lo que son las SPL ;-)

Hace más de un dos años, haciendo una consulta a mi colega mexicano Christopher Valderrama (alias GatorV), en el intercambio me dice "¿y por qué no usás las SPL?" (¿?). Atónito, me pregunté "¿será alguna libería para instalar?" ;-), pero no, ocultas casi en el manual estaban las "Standard PHP Library", con muy poca documentación.

Desde ahí es que empecé a usar el DirectoryIterator para recorrer fácilmente una estructura de directorios de forma recursiva con solo:

1  
<?php
2  
foreach (
3       new 
RecursiveIteratorIterator(
4        new 
RecursiveDirectoryIterator(
5        
DATA,
6        
RecursiveDirectoryIterator::KEY_AS_PATHNAME),
7       
RecursiveIteratorIterator::CHILD_FIRST
8       
) as $directory => $info){
9  
10       if (
$this->isFileDat($info)) {
11            
$this->procesarDir($directory);
12       }
13  }
14  
?>



Parece algo complejo, pero probando este código e imprimiendo los valores verás como puedes recorrer su contenido.

Todo esto viene al caso del artículo "5 funcionalidades de PHP que no se puede ignorar", donde entre ellas se habla de la "SPL".

Indudablemente hay mucho para aprender, pero está todo en los manuales. Si te crees "Senior" (no me cuento, me considero eterno alumno), no lo creas hasta por lo menos haber usado alguna vez estas 5 funcionalidades. ;-)

8 comentarios:

Anónimo dijo...

Creo PHP debería de hacerle mas ruido a sus librerías internas, son muy poderosas y dan mucha funcionalidad de forma nativa.

De todos modos gracias por acordarte de hace tanto tiempo ;-)

Andrés Guzmán dijo...

Muy poderosas, ocupo a diario, Iterator, ArrayObject, SplObjectStorage (Colección de objetos), SplObserver, RecursiveIterator, DirectoryIterator.

muy recomendado usarla, auque aun falta documentación oficial de php, pero vale la pena jugar con ellas y usarlas.

StarSur dijo...

ese codigo es equivalente a esto:

import os

for dirpath, dirnames, filenames in os.walk("/home/alqu/stuff"):
for filename in filenames:
print filename

Enrique Place dijo...

Estimado StarSur:

Ajá y eso es ... Java?

Entonces? ;-)

StarSur dijo...

Eso es Python, tambien podria ser Ruby, o un macro de Lisp, pero seguro que no seria Java, imposible desde un punto de vista filosofico, economico y social, imposible.

Enrique Place dijo...

Estimado StarSur:

> Eso es Python, tambien podria
> ser Ruby, o un macro de Lisp, pero
> seguro que no seria Java,
> imposible desde un punto de vista
> filosofico, economico y social,
> imposible.

Sí, bueno, no fui claro, lo que quise decir: tu me saliste con código de un lenguaje X, yo te comenté que era un lenguaje Y como ejemplo de que "no te entiendo nada, que tiene que ver una cosa con otra" (sorry, soy duro a veces).

Nota mental: dejar de hacer chistes que solo yo entiendo y luego quedo pegado cuando los explico y nadie me cree.

Covi dijo...

Tranquilo... creo que tu intención se entendió a la primera ;) solo que hay talibanes para cualquier cosa: ortografía, sistemas operativos... lenguajes.

Lo que comenta es una tontería y sí, es obvio que se puede tomar como pseudocódigo, en php también puedes hacerlo mucho más corto:

foreach ( scandir($path) as $file ) {}
foreach ( glob("$path/*.$filter") as $file ) {}
la clásica:
while ( ($archivo = readdir($path)) !== false ) {}
...pero no tan robusto ^^!
Buff, hay mil formas, la recursividad también es abstracta, no tiene nada que ver con el lenguaje.

Estoy totalmente de acuerdo en la cantidad de funcionalidades nativas y desconocidas de PHP... tenemos librerías externas, frameworks... que en muchos casos implementan lo que PHP ya puede hacer pero es cierto, sí, se desconocen.

Juan Pablo dijo...

Hola, hace un tiempo que empece a programar en php y este blog siempre aparece cuando consulto algo :). Gracias por los consejos y por hacerme descubrir cosas nuevas.
Estuve viendo el manual de SPL y al parecer esta bastante completo dejo el link:
http://ar2.php.net/manual/en/book.spl.php

Entradas populares