Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/02/2010, 10:12
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Colección de objetos de diferentes clases

Es que sí implica un poco pero para solucionarlo es mucho más sencillo si lo haces usando Factory, ya que es un patrón muy sencillo mira te dejo un ejemplo:
Código PHP:
Ver original
  1. class Producto {
  2.     public static function factory($sProductType, $aData)
  3.     {
  4.         $sProductType = ucfirst($sProductType);
  5.         $sProduct = "Product{$sProductType}";
  6.         $sProductFileClass = $sProduct.".php";
  7.        
  8.         if (file_exists("/path/a/las/clases/{$sProductFileClass}")) {
  9.             include "/path/a/las/clases/{$sProductFileClass}";
  10.             $Product = new $sProduct($aData);
  11.         } else {
  12.             throw new Exception("Error, el tipo de producto: {$sProductType} no existe");
  13.         }
  14.        
  15.         return $Product;
  16.     }
  17. }

Así si tienes tus archivos ProductoTipoA.php, ProductoTipoB.php y tus clases ProductoTipoA y ProductoTipoB, puedes hacer algo así:
Código PHP:
Ver original
  1. class ConjuntoProductos {
  2.   ...
  3.   public function getTodosLosProductos($conn) {
  4.     $productos = array();
  5.     $sql = "SELECT * FROM producto ORDER BY id";
  6.  
  7.     if ($res = $conn->query($sql)) {
  8.       while ($row = $res->fetch_assoc())
  9.       {
  10.          $productos[] = Producto::factory($row['type'], $row);    
  11.       }
  12.       return $productos;
  13.     } else {
  14.       throw new SQLException("Error en la base de datos");
  15.     }
  16.   }
  17.   ...
  18. }

Saludos.