Carga automática de clases en POO en PHP
Ya sabes que para utilizar
alguna clase, debemos incluirla
a través de require. Cuando en un proyecto
hay muchas clases, resultan muchas
inclusiones, que son muy incómodas de escribir
y difíciles de controlar.
Para resolver este problema en PHP se añadió la carga automática de clases. La carga automática permite a PHP cargar automáticamente el archivo con la clase al intentar acceder a esa clase en el código. Sin embargo, las clases no se cargarán así por sí solas - es necesario ubicarlas en las carpetas del sitio de una manera especial, siguiendo alguna convención sobre los nombres de archivos y carpetas de las clases. Se puede utilizar la convención incorporada en PHP, o inventar una propia y utilizarla.
Vamos a empezar por analizar la convención estándar de PHP. Esta convención consiste en que si tenemos un archivo con una clase, entonces la ruta de carpetas en el sitio hacia ese archivo debe coincidir con el espacio de nombres del archivo, y el nombre del archivo debe coincidir con el nombre de la clase que contiene. Al mismo tiempo, los nombres de las carpetas y del archivo deben estar en minúsculas.
Veamos un ejemplo. Supongamos que tenemos la siguiente clase:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Por convención, esta clase debe ubicarse
en la carpeta /core/admin/ en el archivo
pagecontroller.php.
Ahora vamos en el archivo index.php a utilizar
nuestra clase, sin incluirla mediante require,
sino usando la carga automática. Para ello, al principio
del archivo en el que se invocan las clases, se debe
llamar a la función spl_autoload_register.
Hagámoslo:
<?php
spl_autoload_register(); // activamos la carga automática
$obj = new Core\Admin\PageController; // creamos un objeto tranquilamente
?>
En el archivo index.php active la carga automática
de clases. Siguiendo la convención sobre nombres
de carpetas y archivos, cree la clase Core\User,
la clase Core\Admin\Controller y la clase
Project\User\Data. En el archivo index.php
cree objetos de estas clases.