Hola como andas.
Bueno para empezar, recorda que si tenes en 1 clase llamada Base de datos
y se encarga de manejar conexiones y consultas a la base de datos,
extenderla a un material no seria muy logico.
Lo que podrias es que un material pueda o no tener 1 referencia a la base de datos (atributo privado).
Y recuperar al instanciarlo 1 referencia de la clase Base de datos que podria ser singleton esa clase, instanciada solo 1 vez.
Pero bueno volviendo a lo que me preguntaste lo que te convendria es en el constructor de la implementacion de la interfaz
MaterialCollection recuperar todos los id desde la base de datos, para luego generar los respectivos id de ese material.
Algo asi seria.
Código PHP:
Ver originalinclude('db.php');
class material {
public $id;
public $nombre;
public $referencia;
public $peso;
public $tamano;
/* Instancia privada de la clase db*/
private $_db;
public function __construct($id_material){
$this->_db = new DB();
$sql= "
SELECT
*
FROM material
WHERE id = ".$id_material."
";
$this->_db->query = $sql;
/* Se supone que esto devuelve 1 solo
array asociativo si el id es unico*/
$t_material = $this->_db->AssocList();
$this->id = $t_material['id'];
$this->nombre = $t_material['nombre'];
$this->referencia = $t_material['referencia'];
$this->peso = $t_material['peso'];
$this->tamano = $t_material['tamano'];
}
}
class MaterialCollection implements Iterator {
private $_items = null;
private $_db;
public function __construct() {
$this->_material
= array(); $this->_db = new DB();
$this->_db->query = "SELECT id FROM material";
/* Se supone que esto devuelve todos los id leidos*/
$materiales_id = $this->_db->AssocList();
for($i=0;$i<count($materiales_id);$i++) {
this->addItem( new Material($materiales_id ['id']) );
}
}
public function addItem($i){
$this->_items[] = $i;
}
public function removeItem($i){
}
}
}
return key($this->_items
); }
return next($this->_items
); }
public function valid() {
}
}
$material = new material(1);
$mc = new MaterialCollection();
while(($m = $mc->next()) !== null) {
echo $material->id;
}
Espero sirva, saludos.