Tema: Duda PHP POO
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/07/2008, 19:45
Avatar de dots3r
dots3r
 
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 16 años, 5 meses
Puntos: 5
Duda PHP POO

Buen día a todos estoy tratando de programar un carrito de compras en php y POO a modo de aprendizaje y en el transcurso me surgio la siguinte duda.

Tengo definidas 4 clases:
ClassBaseDatos.php: manejo de base de datos mysql.
ClassProducto.php: Esta clase es simple la utilizo para crear objetos tipo producto.
ClassCarrito.php: Desde esta clase controlo a los objetos tipo producto para agregar, eliminar y editar los productos del carrito.
ClassCatalogo.php: Desde aqui me conecto a la base de datos usando la clase BaseDatos y obtengo los productos.

Ahora bien mi duda es la siguiente, como mencione desde la clase carrito controlo a objetos tipo producto:

ClassProducto.php
Código PHP:
<?php
class Producto {
    private 
$Id;
    private 
$Nombre;
    private 
$Precio;
    
        function 
__construct ($Nombre$Precio) {
            
$this->Id md5($Nombre);
            
$this->Nombre $Nombre;
            
$this->Precio $Precio;
        }
        
        public function 
getId () {
            return 
$this->Id;
        }
        
        public function 
getNombre () {
            return 
$this->Nombre;
        }     
        
        public function 
getPrecio () {
            return 
$this->Precio;
        }
    
}
?>
ClassCarrito.php
Código PHP:
<?php
class Carrito {
    private 
$Productos = array();
    private 
$Total;
    
        function 
__construct () {
            
        }
        
        
// Agrega un Producto
        
public function add (Producto $Producto$Cantidad 1) {
            if(
array_key_exists($Producto->getId(), $this->Productos)) {
                
$this->Productos[$Producto->getId()]['Cantidad'] += $Cantidad;            
            }else{
                
$this->Productos[$Producto->getId()] = array('Producto' => $Producto,
                                                            
'Cantidad' => $Cantidad);
            
            }                            
        }
        
        
// Elimina un Producto
        
public function remove (Producto $Producto) {
            if(
array_key_exists($Producto->getId(), $this->Productos)) {
                unset(
$this->Productos[$Producto->getId()]);
            }
        }
        
        
// Devuelve el numero de Productos
        
public function size () {
            return 
count($this->Productos);
        }
     
        
// Define la Cantidad para un Producto dado
        
public function setCantidad (Producto $Producto$Cantidad) {
            if(
array_key_exists($Producto->getId())) {
                
$this->Productos[$Producto->getId()]['Cantidad'] = $Cantidad;
            } 
        }
     
        
// Define el precio Total
        
private function setTotal (){
            
$Total 0;
            foreach(
$this->Productos as $Producto){
                
$Total += $Producto['Producto']->getPrecio() * $Producto['Cantidad'];
            }
            
$this->Total $Total;
        }
        
        
// Devuelve los Productos
        
public function getProductos () {
            return 
$this->Productos;
        }
        
        
// Devuelve el precio Total
        
public function getTotal () {
            
$this->setTotal();
            return 
$this->Total;
        }
}
?>
Ahora bien, lo que no entiendo esque al momento de obtener los productos desde la base de datos tengo que crear un objeto tipo Producto para cada uno de ellos? O cuando es que tengo que hacer los objetos para pasarlos como parametros en las funciones de la clase carrito, porque tambien se me ocurre obtener los productos desde la base de datos y para agregar uno al carrito hacer lo siguiente:

Código PHP:
<?
$carrito
->add(new($row['nombre'],$row['precio']));
?>
Y bueno, la cosa es que no se que sea lo correcto y es por eso que pido de se ayuda, talves este haciendo las cosas mas complicadas de lo que son al tratar de jugar con objetos directamente en los parametros.

De antemano Gracias y espero su respuesta.