Bueno ya que estoy lanzado pasaremos a la última fase. Yo la llamo pureza del código.
La clase
Alumno es funcional, pero mirandola detenidamente podemos ver dos cosas.
1) Por cada propiedad tenemos que hacer dos metodos, uno
get y otro
set.
2) Una vez instanciado el objeto como podemos acceder a las propiedades sin programar estas funciones y sin poner los atributos a
public.
Pues bien vamos a optimizar alrededor de un 60% el codigo de la clase Alumno.
En php5 existen las nuevas funcionalidades llamadas métodos mágicos. Vamos a aplicar 2 de ellos el __get y el __set. Con estos dos métodos podemos eliminar todos los metodos existentes tipo get y set referidos a cada propiedad de la clase. Para aplicarlo eliminaremos todas las variables y declararemos dentro de un array asociativo. Así eliminaremos un 60% del código y añadiremos el doble de simpleza.
Bien recordemos que el código anterior para
Alumnos era el siguiente:
Código PHP:
class Alumno{
private $id;
private $nombre;
private $apellidos;
public function __construct($id,$nombre,$apellidos){
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$this->id = $id;
}
public function getNombre(){
return $this->nombre;
}
public function setNombre($nombre){
$this->nombre = $nombre;
}
public function getApellidos(){
return $this->apellidos;
}
public function setApellidos($apellidos){
$this->apellidos = $apellidos;
}
public function getId(){
return $this->identificador;
}
public function setId($id){
$this->id = $id;
}
public function __toString(){
return "$this->id .- Alumno: $this->nombre, $this->apellidos<br />";
}
}
Así el nuevo código quedaria de la siguiente manera:
Código PHP:
class Alumno{
private $campos = array();
public function __construct($id,$nombre,$apellidos){
$this->campos["id"] = $id;
$this->campos["nombre"] = $nombre;
$this->campos["apellidos"] = $apellidos;
}
public function __get($propiedad){
if(!array_key_exists($propiedad,$this->campos))
throw new Exception("Esta propiedad no existe $propiedad");
return $this->campos[$propiedad];
}
public function __set($propiedad, $valor){
if(!array_key_exists($propiedad,$this->campos))
throw new Exception("Esta propiedad no existe $propiedad");
$this->campos[$propiedad] = $valor;
}
public function __toString(){
return "$this->id .- Alumno: $this->nombre, $this->apellidos<br />";
}
}
Ahora podemos acceder a las propiedades de los Alumnos de la siguiente manera:
Código PHP:
echo "Carga por xml <br />";
$curso_flash = new Curso();
$curso_flash->load("flash");
foreach ($curso_flash as $alumno){
echo $alumno->id;
echo $alumno->nombre;
echo $alumno->apellidos;
}
Bueno por estas cositas son por las que digo que php5 le pasa la mano a php4. En estas dos clases he utilizado nuevas funcionalidades solo disponibles para la versión 5. Que son utilización de simple_xml, métodos mágicos __toString, __get, __set, type hinting (PHP 5 introduce Type Hinting. Las funciones ahora son capaces de forzar que los parámetros sean objetos especificando el nombre de la clase en el prototipo de la función. )
Código PHP:
public function addAlumno(Alumno $alumno){
$this->alumnos[] = $alumno;
}
excepciones
throw new Exception, utilización de SPL con la interfaz Iterator ...
Mi conclusión es que la versión 5 está preparada para soluciones empresariales de gran proyección, también sus características son más moldeables a la hora de construir frameworks.
Supongo que la gente no lo utiliza ya que estan acostumbradas a la antigua versión de php4. Por suerte a la gente que llegamos de Java nos ha sido una bendición la nueva versión :). Saludos a todos