En realidad lo que esta mal es que te falta un "_" en los constructores, tenes
_construct cuando deberia ser
__construct.
Y tendrias que revisar varias cosas pero te sugiero que no hagas echo's, simplemente en render concatena y retorna la cadena, para imprimir llama a render en el __toString, algo asi:
Código PHP:
Ver originalabstract class Element
{
...
abstract public function render();
public function __toString()
{
return $this->render();
}
}
class Select extends Element
{
...
public function render()
{
$html = $this->traeLabel();
$html .= "<select name=" . $this->traeName() . ">";
foreach ($this->traeOptions() as $opt) {
$html .= $opt->render();
}
$html .= "</select>";
return $html;
}
}
obviamente el render de option no imprime sino que retorna el string concatenado, luego para utilizar:
Código PHP:
Ver original$frutas= new Select();
$frutas->creaLabel('Frutas');
$frutas->creaName('frut_sel');
$frutas->creaOption(new Option('Naranjas','Naranjas'));
$frutas->creaOption(new Option('Fresas','Fresas'));
echo $frutas;
Saludos.