Yo utilizaría la 2da opcion como te dice GatorV. Para asi desacoplar los componentes del formulario del formulario como tal. Así puedo agregar nuevos componentes sin tener que editar el código de mi clase formulario (y así mantengo el principio OCP, también el SRP).
Lo que si te recomiendo es la parte de:
Código PHP:
Ver originalclass cForm
{
private $Campos = array();
public function addCampo (Campo $Campo) //Mejor uso del POLIMORFISMO
{
$this->Campos[$Campo->GetNombre()] = $Campo;
}
}
La clase formulario no debe estar encargada de darle los valores a los input que contiene. Talvez si deba mantener el estado y llamar alguna funcion del mismo campo para setear el valor, pero no encargarse el mismo de darselo.