domingo, 26 de octubre de 2014

PHP (07) POO (08) Carga automática de clases

Hasta ahora hemos visto todo lo relacionado con objetos dentro del mismo archivo, sin embargo la planificación en proyectos grandes donde las clases pueden ser muy grandes con multitud de métodos... pueden resultar más interesante, al igual que cuando hablamos de los includes, que tengamos nuestras clases en diferentes archivos, para que de ese modo pueda estar el código más estructurado y sencillo de entender.

Para este propósito PHP incluye una función que puede ser utilizada de forma muy sencilla, se trata de __autoload().
Su uso como veremos a continuación es sumamente sencillo y nos ayudará muchísimo a la hora de organizar nuestro trabajo.
function __autoload($nombre_clase)
{
 require $nombre_clase . '.php';
}

Vemos que esta función recibe el nombre de una clase como argumento y una vez recibido le añade la extensión del archivo .php y lo requiere, por lo que solo lo carga cuando es necesario.

De este modo podríamos tener dos archivos adicionales que recibirían el nombre de las clases, el primero llamado Person.php:
<?php
 class Person
 {
  var $nombre;
  var $edad;
  
  function set_nombre($dato)
  {
   $this->nombre = $dato;
  }
  
  function get_nombre()
  {
   return $this->nombre;
  }

  function set_edad($dato)
  {
   $this->edad = $dato;
  }
  
  function get_edad()
  {
   return $this->edad;
  }
 }

?>

Y el segundo llamado Ciudad.php:
<?php
class Ciudad extends Person
 {
  var $ciudad;

  function set_ciudad($dato)
  {
   $this->ciudad = $dato;
  }
  
  function get_ciudad()
  {
   return $this->ciudad;
  }

 }
?>

Aparte de nuestro index.php, donde tiene lugar la acción:
<?php
 function __autoload($nombre_clase)
 {
  require $nombre_clase . '.php';
 }

 $persona1 = new Ciudad;
 $persona1->set_nombre('Antonio');
 $persona1->set_edad('20');
 $persona1->set_ciudad('Burgos');

 echo '<p>Mostrando nombre con $persona1->get_nombre: ' . $persona1->get_nombre() . '</p>';
 echo '<p>Mostrando edad con $persona1->get_edad: ' . $persona1->get_edad() . '</p>';
 echo '<p>Mostrando ciudad con $persona1->get_ciudad: ' . $persona1->get_ciudad() . '</p>';

?>

Una vez que tenemos los tres archivos (que deben de estar en la misma carpeta), tan solo hace falta ejecutar el index.php y tendremos el siguiente resultado:
Mostrando nombre con $persona1->get_nombre: Antonio
Mostrando edad con $persona1->get_edad: 20
Mostrando ciudad con $persona1->get_ciudad: Burgos

Algo realmente sencillo.
Con todo lo visto hasta ahora ya estamos listos para afrontar la POO avanzada a partir del próximo articulo.

No hay comentarios:

Publicar un comentario