Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/05/2009, 12:45
Avatar de Synkronice
Synkronice
 
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 17 años, 1 mes
Puntos: 48
APORTE: Carrito de la compra para PHP5

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>";