⊗ppOpNsCA 107 of 107 menu

Función personalizada para la autocarga de clases en POO en PHP

A menudo la autocarga por defecto puede no satisfacerte por alguna razón. En tal caso puedes escribir tu propia autocarga.

Para ello, a la función spl_autoload_register hay que pasarle como primer parámetro tu función callback escrita por ti. Esta función se llamará cuando PHP detecte un acceso a una clase no cargada. El parámetro de esta función recibiré el nombre de la clase con su espacio de nombres:

<?php spl_autoload_register(function($class) { // en la variable $class estará el nombre de la clase con el espacio de nombres }); ?>

Y la responsabilidad de la función será cargar esa clase mediante require basándose en el nombre de la clase. Es decir, dentro de esta función debemos escribir nuestra propia regla para cargar clases, es decir, nuestra propia convención de nomenclatura.

Escribamos un ejemplo de una autocarga personalizada. Supongamos, por ejemplo, que decidimos que la ruta al archivo de la clase desde la raíz del sitio será la misma que el espacio de nombres, pero conservando las mayúsculas y minúsculas.

Es decir, si tenemos la clase Core\Admin\PageController, su ruta debe ser Core/Admin/PageController.php.

Como ves, para transformar el nombre de la clase con su espacio de nombres solo necesitas cambiar las barras invertidas por barras normales, y al nombre de la clase añadir .php. Hagamos esto:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Sin embargo, obtendremos una ruta relativa al archivo (relativa a la raíz del sitio). Es mejor hacer una ruta absoluta, así:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Hay otro matiz. En diferentes sistemas operativos la ruta de carpetas puede usar la barra normal o la invertida. Hagamos nuestro código independiente del sistema operativo. Para ello, en lugar de la barra normal para separar rutas usaremos la constante DIRECTORY_SEPARATOR, que contiene la barra correcta para el sistema operativo en el que se está ejecutando nuestro script. Finalmente obtendremos el siguiente código:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Prueba la función de autocarga que he creado.

Inventa tu propia regla de autocarga y impleméntala.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar