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 originalclass Producto {
public static function factory($sProductType, $aData)
{
$sProductType = ucfirst($sProductType); $sProduct = "Product{$sProductType}";
$sProductFileClass = $sProduct.".php";
if (file_exists("/path/a/las/clases/{$sProductFileClass}")) { include "/path/a/las/clases/{$sProductFileClass}";
$Product = new $sProduct($aData);
} else {
throw new Exception("Error, el tipo de producto: {$sProductType} no existe");
}
return $Product;
}
}
Así si tienes tus archivos ProductoTipoA.php, ProductoTipoB.php y tus clases ProductoTipoA y ProductoTipoB, puedes hacer algo así:
Código PHP:
Ver originalclass ConjuntoProductos {
...
public function getTodosLosProductos($conn) {
$sql = "SELECT * FROM producto ORDER BY id";
if ($res = $conn->query($sql)) {
while ($row = $res->fetch_assoc())
{
$productos[] = Producto::factory($row['type'], $row);
}
return $productos;
} else {
throw new SQLException("Error en la base de datos");
}
}
...
}
Saludos.