PHP 5.1 y spl_autoload_register

Mar 31 2008

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.