Hola,
quiero compartir con vosotros un carrito de la compra que he realizado.
Los requisitos mínimos para que funcione son PHP5.
Podéis usarlo y editarlo a vuestro gusto.
Cualquier duda o sugerencia estoy a vuestra disposición.
Saludos!
Articulos.class.php
Clase que representa un artículo.
Código PHP:
<?php
interface iArticulos
{
public function getIdArticulo();
public function getPrecioArticulo();
}
class Articulos implements iArticulos
{
private $id_articulo;
private $precio_articulo;
public function __construct()
{
}
public function setIdArticulo($id_articulo)
{
$this->id_articulo = $id_articulo;
}
public function getIdArticulo()
{
return $this->id_articulo;
}
public function setPrecioArticulo($precio_articulo)
{
$this->precio_articulo = $precio_articulo;
}
public function getPrecioArticulo()
{
return $this->precio_articulo;
}
}
ColeccionArticulos.class.php
Clase que representa al carrito que almacenará los artículos.
Implementa el patrón singleton así que para instanciarla hay que usar el método estático
getCarrito().
Código PHP:
<?php
class ColeccionArticulos
{
private static $carrito;
private $coleccion_articulos = array();
private function __construct()
{
// Prevenimos que se pueda instanciar esta clase
}
public function __clone()
{
trigger_error('Clonacion no permitida para esta clase.', E_USER_ERROR);
}
public static function &getCarrito()
{
if (!isset(self::$carrito)) {
$c = __CLASS__;
self::$carrito = new $c;
}
return self::$carrito;
}
public function addArticulo(Articulos $articulo)
{
$id_articulo = $articulo->getIdArticulo();
if($id_articulo)
$this->coleccion_articulos[$id_articulo] = $articulo;
}
public function removeArticulo(Articulos $articulo)
{
$id_articulo = $articulo->getIdArticulo();
if($id_articulo && array_key_exists($id_articulo, $this->coleccion_articulos))
unset($this->coleccion_articulos[$id_articulo]);
}
public function getCantidadArticulos()
{
return count($this->coleccion_articulos);
}
public function getPrecioTotal()
{
$precio_total = 0;
foreach($this->coleccion_articulos as $articulo)
$precio_total += $articulo->getPrecioArticulo();
return $precio_total;
}
public function vaciarCarrito()
{
$this->coleccion_articulos = array();
}
}
Y por último un script para probarlo
index.php Código PHP:
<?php
require_once "Articulos.class.php";
require_once "ColeccionArticulos.class.php";
/* EJEMPLO A: AGREGAMOS 2 ARTICULOS */
echo "<pre>EJEMPLO A: AGREGAMOS 2 ARTICULOS\n";
// Creamos el carrito
$carrito = ColeccionArticulos::getCarrito();
// Creamos el 'Articulo 1'
$art1 = new Articulos();
$art1->setIdArticulo("001");
$art1->setPrecioArticulo(45.60);
// Agregamos el 'Articulo 1' al carrito
$carrito->addArticulo($art1);
// Creamos el 'Articulo 2'
$art2 = new Articulos();
$art2->setIdArticulo("005");
$art2->setPrecioArticulo(5.40);
// Agregamos el 'Articulo 2' al carrito
$carrito->addArticulo($art2);
// Mostramos la cantidad de articulos y el precio total tras agregar los dos articulos.
echo "\nCANTIDAD ARTICULOS: ".$carrito->getCantidadArticulos();
echo "\nPRECIO TOTAL: ".$carrito->getPrecioTotal();
echo "</pre>";
/* EJEMPLO B: ELIMINAMOS 1 ARTICULO */
echo "<pre>EJEMPLO B: ELIMINAMOS 1 ARTICULO \n";
// Eliminamos el 'Articulo 1'
$carrito->removeArticulo($art1);
// Mostramos la cantidad de articulos y el precio total tras eliminar un articulo.
echo "\nCANTIDAD ARTICULOS: ".$carrito->getCantidadArticulos();
echo "\nPRECIO TOTAL: ".$carrito->getPrecioTotal();
echo "</pre>";
// Vaciamos el carrito
$carrito->vaciarCarrito();
/* EJEMPLO C: VACIAMOS EL CARRITO */
echo "<pre>EJEMPLO C: VACIAMOS EL CARRITO\n";
// Mostramos la cantidad de articulos y precio total tras vaciar el carrito.
echo "\nCANTIDAD ARTICULOS: ".$carrito->getCantidadArticulos();
echo "\nPRECIO TOTAL: ".$carrito->getPrecioTotal();
echo "\n\nFIN DEL SCRIPT";
echo "</pre>";