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