⊗ppOpNsAu 105 of 107 menu

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.

azbydeenesfrkakkptruuz