PHP 5.1 y spl_autoload_register
Desde PHP 5.1 disponemos de spl_autoload_register (desde PHP 5.0 podemos definir la función __autoload).
En PHP 5 si se define una función __autoload, ésta se llamará cada vez que se intente acceder a una clase que no exista. Tanto para llamar a un método estático como para el instanciado de un nuevo objeto de dicha clase.
Esto nos permite cargar código implícitamente y olvidarnos de incluir dependencias continuamente y permitiéndonos tener un lazy loading muy lightweight sin tener que cargar cosas que no nos interesan.
La única pega que se le puede ver a este LazyLoading es que nos obliga a a usar clases.
Para agrupar funciones útiles que usemos comúnmente se puede define una clase util
con una serie de métodos estáticos. Por ejemplo, yo suelo usar muy a menudo una función que llamo print_r_pre
que se encarga de hacer lo mismo que un print_r
, pero para que se vea correctamente en la web (usando __autoload
y htmlspecialchars
). Pues bien, me podría hacer una clase “util” con dicha función como método estático:
class util {
static function print_r_pre($v) {
echo '<pre>' . htmlspecialchars(print_r($v, true)) . '</pre>';
}
}
Lo metería, por ejemplo, en un fichero llamado util.php en una carpeta creada para usar con la característica __autoload. Por ejemplo: /core/classes/util.php
Y luego en un fichero que sí que debería cargar cada vez algo tipo esto (suponiendo que el fichero que incluye este código esté en /core/
):
function __autoload($class) {
if (!file_exists($file = dirname(__FILE__) . '/classes/' . $class . '.php')) return;
require_once($file);
}
Conclusión: Si estás usando PHP 5 y quieres ahorrarte multitud de require_once
. Las soluciones __autoload
son para ti.