SPL

Biblioteca estándar de PHP


La Biblioteca Estándar de PHP (BEP) (o en inglés Standar PHP library, SPL) es una colección de interfaces y clases pensadas para resolver problemas comunes.
Los programadores que vienen de Java o de C# estarán acostumbrados a usar muchas clases que vienen incorporadas en todo el marco de trabajo del respectivo lenguaje. Esto algunas veces provoca disgustos al iniciarse en PHP porque no se encuentran las facilidades que se brindan en esos lenguajes.
A partir de la versión 5 de PHP, se añadieron algunas clases e interfaces que solucionan problemas comunes y se adecuan al paradigma orientado a objetos que muchos programadores están acostumbrados a trabajar. La SPL contiene un número de clases destinadas sobretodo a estrucuras de datos y al manejo de archivos.

Estructuras de datos

La principal fortaleza de la SPL son las estructuras de datos que brinda. Claro está que todas estas estructuras están en otros lenguajes. Espero que sea de utilidad y pueda aprovechar estas características de PHP.

Básicamente las estructuras de datos se agrupan en 4 bloques:
  • Listas doblemente enlazadas.
  • Arreglos.
  • Mapas.
  • Montículos.

Listas doblemente enlazadas

La primer clase que veremos es la SplDoublyLinkedList. Esta clase es una lista doblemente enlazada. Es equivalente a una java.util.LinkedList en Java o bien a una System.Collections.Generic.LinkedList en C#.
A continuación se muestra un ejemplo de cómo crear una lista e insertar números enteros:

<?php

$lista = new SplDoublyLinkedList();
$lista->push(1);
$lista->push(2);
$lista->push(3);
$lista->push(4);
foreach($lista as $l){
   echo $l;
}

?>

La salida del código anterior será:

1234
Cabe aclarar que el método push puede recibir cualquier tipo de datos y no solamente enteros, incluso puede recibir objetos.

Otro método para insertar datos a la lista es el método add(index, new_val) que recibe el índice y el valor. El índice indica la posición en la cual se va a insertar. Si el índice está fuera de rango se lanzará una OutOfRangeException o cuando index no pueda ser analizado como un entero. Hay que tener cuidado con este método ya que está disponible a partir de la versión 5.5 de PHP mientras que, en general, el resto está disponible desde la versión 5.3. Más adelante encontrará una tabla con información detallada de los métodos.

Ejemplo:

$lista = new SplDoublyLinkedList();
$lista->add(0, 70);
$lista->add(1, 80);
$lista->add(2, 90);
foreach($lista as $l){
   echo $l;
}

La salida del código anterior será:

708090

Interfaz Countable

Esta interfaz tiene un método llamado count() que retorna la cantidad de elementos que contiene una estructura sea cual sea. La clase SplDoublyLinkedList implementa esta interfaz por lo que obligatoriamente tiene una implementación del método count(), la cual justamente, retorna la cantidad de elementos que existe en la lista. Además, existe una función llamada count(), muy usada para obtener la longitud de los arreglos. Dicha función también puede ser usada en todos aquellos objetos que implementen la interfaz Countable. Por ejemplo:

<?php

$lista = new SplDoublyLinkedList();
$lista->push(1);
$lista->push(2);
$lista->push(3);
echo count($lista); // Resultado 3.
echo $lista->count(); // Resultado 3.

?>


Pila

Una pila es una estructura de datos de tipo LIFO (Last In, First Out), es decir, lo que ingresa al último es lo primero que sale. La SplDoublyLinkedList proporciona métodos que permiten simular que se está trabajando con una pila (en inglés stack), sin embargo, sigue siendo una lista enlazada.

Estos métodos son: void push(mixed) y mixed pop(void). El primero de ellos inserta en la pila y el segundo saca el que está encima de la pila. Si lo que se necesita es sacar el que está encima de la pila pero luego devolverlo, osea simplemente verlo, se puede usar el método top().
Si uno quiere crear explícitamente una pila entonces puede hacer uso de la clase SplStack que extiende a la SplDoublyLinkedList y hereda todos sus métodos.


Cola

De la misma forma que existe una pila, existe una cola. Una cola es una estructura de datos de tipo FIFO (First In, First Out), es decir, lo que ingresa primero es lo primero que sale. Se puede hacer uso de la clase SplQueue que extiende a la SplDoublyLinkedList y hereda todos sus métodos y a su vez añade algunos otros. Los dos más importantes son:

void enqueue(mixed $value): Agrega un elemento a la cola.
mixed dequeue(void): Saca el elemento de la cola.

Ejemplo:

<?php

$lista = new SplQueue();
$lista->enqueue(1);
$lista->enqueue(2);
$lista->enqueue(3);
$lista->enqueue(4);

$lista->dequeue();

foreach($lista as $l){
   echo $l;
}

?>

Tabla de métodos.

Método
Versión
Descripción corta
public void add( mixed $index, mixed $newval )
5.5.0
Agrega un elemento en una posición determinada.
public void push(mixed $newval )
5.3.0
Agrega un elemento al final de la lista.
public void unshift(mixed $newval )
5.3.0
Agrega un elemento al inicio de la lista.
public mixed bottom( void )
5.3.0
Obtiene el primer elemento. No lo borra de la lista.
public mixed top( void )
5.3.0
Obtiene el último elemento. No lo borra de la lista.
public int count( void )
5.3.0
Retorna la cantidad de elementos.
public bool isEmpty( void )
5.3.0
Indica si la lista está vacía.
public mixed shift( void )
5.3.0
Extrae el elemento inicial de la lista. Sí lo borra de la lista.
public mixed pop( void )
5.3.0
Extrae el elemento final de la lista. Sí lo borra de la lista.


* Estos no son todos los métodos, para consultarlos todos puede dirigirse a: http://php.net/manual/es/class.spldoublylinkedlist.php

Bibliografía

http://php.net/manual/es/book.spl.php

No hay comentarios:

Publicar un comentario