Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/05/2006, 05:27
Casuis
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 8 meses
Puntos: 3
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

Última edición por Casuis; 24/05/2006 a las 05:49