No funciona por lo mismo, tienes los conceptos equivocados no puedes poner PHP dentro de una cadena y esperar que se evalue, tu problema esta aqui:
Código:
echo "<form action=\"<?=$_SERVER['PHP_SELF'];?>\">";
Ahí estas metiendo código PHP dentro de la cadena y esperas que se evalue, eso no es correcto, en dado caso tendría que ser así:
Código PHP:
Ver originalecho "<form action=\"" . $_SERVER['PHP_SELF'] . "\">";
Por eso revisa el link que te deje, tienes que aprender a usar las comillas correctamente.
Mi comentario a que no porque llames a la misma pagina vas a seguir dentro de alta() en tu clase. PHP es un lenguaje stateless, una vez que se termina de ejecutar PHP, se envia el resultado al cliente y es lo que ves ya en tu browser.
Por eso al enviar de regreso el formulario al servidor aunque lo mandes a $_SERVER['PHP_SELF'] no va a entrar de nuevo a alta() a menos que tu lo mandes llamar como te explicaba.
Lo de separar la parte de HTML del proceso es un buen consejo de programación hace las cosas más mantenibles y sencillas, y puedes usar un sistema de plantillas como Smarty o Zend_View que te permite tener todo tu HTML fuera de la parte de proceso de PHP.
Es por mantenimiento y extensibilidad, si pones todo tu HTML y PHP juntos es complicado luego darle mantenimiento.
Saludos.