Quisiera saber como manejo una colección de objetos de clases diferentes, heredados de una super clase abstracta, si es que es posible. Cuando la clase no es abstracta, no tengo problemas. Por ejemplo, con las típicas clases de Producto y ConjuntoProductos, lo hago así:
Código PHP:
class Producto {
...
public static function load($id, $conn) {
...
return $producto;
}
}
class ConjuntoProductos {
...
public function getTodosLosProductos($conn) {
$productos = array();
$sql = "SELECT * FROM producto ORDER BY id";
if ($res = $conn->query($sql)) {
while ($row = $res->fetch_assoc())
{
$productos[] = Producto::load($row['id'], $conn);
}
return $productos;
} else {
throw new SQLException("Error en la base de datos");
}
}
...
}
Código PHP:
abstract class Producto {
...
}
class ProductoDeTipoA extends Producto {
...
public static function load($id, $conn) {
...
return $producto;
}
}
class ProductoDeTipoB extends Producto {
...
public static function load($id, $conn) {
...
return $producto;
}
}
Código PHP:
class ConjuntoProductos {
...
public function getTodosLosProductos($conn) {
$productos = array();
$sql = "SELECT * FROM producto ORDER BY id";
if ($res = $conn->query($sql)) {
while ($row = $res->fetch_assoc())
{
//Aquí, al hacer el load no se a que clase tengo que llamar (TipoA?, TipoB?)
$productos[] = Producto::load($row['id'], $conn);
}
return $productos;
} else {
throw new SQLException("Error en la base de datos");
}
}
...
}