En este momento estás viendo PHP (07) POO (08) Carga automática de clases

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

  • Autor de la entrada:
  • Categoría de la entrada:PHP
  • Comentarios de la entrada:2 comentarios

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… puede 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.

Esta entrada tiene 2 comentarios

  1. adri

    Creo que no funcionará porque en el index no estas llamando a tu funcion autoload, solo la defines asi que los ficheros delas clases no se cargan

    1. miguel

      Pruebalo, veras como si funciona y se obtiene el resultado que se explica en el post.
      __autoload no tiene que ser llamada, se inicia sola, creando una llamada a una clase/interfaz que todavía no haya sido definida. Al invocar a esta función el motor de scripting da una última oportunidad para cargar la clase antes que PHP falle con un error.
      De ahí el nombre del post de carga automatica 🙂

Deja una respuesta

Responsable » Miguel Ángel López Torralba
Finalidad » Contactar conmigo y enviarte mi contenido.
Legitimación » Tu consentimiento.
Destinatario » MailChimp, mi proveedor de email marketing, que está acogido al acuerdo de seguridad EU-US Privacy.
Derechos » Acceder, rectificar, limitar o suprimir tus datos cuando quieras.