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.