Aunque es relativamente sencillo, dejo este Post con un ejemplo para ver cómo se implementa una pila o stack (en inglés) en PHP.
Básicamente es una estructura de datos LIFO (First In, First Out) y se identifica por acceder a los elementos por un extremo (sea inicio o fin).
En este caso pongo un ejemplo de una pila encapsulada y con acceso por el último elemento del contenedor.
Además, como se verá en el ejemplo, se utiliza $this->stack[] = $value y no array_push( $this->stack, $value ). Esto es porque, si únicamente se va a introducir un único elemento, nos ahorramos la llamada a la función.
class Stack
{
private $stack;
public function __construct()
{
$this->stack = array();
}
public function addElement( $value )
{
$this->stack[] = $value;
}
public function getElement()
{
return array_pop( $this->stack );
}
public function isEmpty()
{
return empty( $this->stack );
}
public function getLength()
{
return count( $this->stack );
}
}
$stack = new Stack();
var_dump( $stack->isEmpty() );
$stack->addElement( 'Phineas' );
$stack->addElement( 'Ferb' );
$stack->addElement( 'Perry' );
var_dump( $stack->isEmpty() );
$people = array();
$people[] = $stack->getElement();
$people[] = $stack->getElement();
$people[] = $stack->getElement();
var_dump( $stack->isEmpty() );
var_dump( $people );sí, lo sé, no he documentado la clase ni métodos…
Además, si utilizas PHP 5.3.X o superior tienes disponible la clase SplStack que incorpora las funcionalidades básicas de una pila.
$stack = new SplStack(); var_dump( $stack->isEmpty() ); $stack->push( 'Phineas' ); $stack->push( 'Ferb' ); $stack->push( 'Perry' ); var_dump( $stack->isEmpty() ); $people = array(); $people[] = $stack->pop(); $people[] = $stack->pop(); $people[] = $stack->pop(); var_dump( $stack->isEmpty() ); var_dump( $people );


