31/03/08

php5.1 y spl_autoload_register

Desde php5.1 disponemos de spl_autoload_register (desde php5.0 podemos definir la función __autoload).

En php5 si se define una función __autoload, ésta se llamará cada vez que se intente acceder a una clase que no exista. Tanto a un método estático como a la creación de un nuevo objeto de ese tipo.

Ésto nos permite cargar código implícitamente y olvidarnos de incluir dependencias continuamente y permitiéndonos hacer algunas cosas mas lightweight sin tener que cargar cosas que no nos interesan.

Aunque nos obliga a usar clases.

Para agrupar funciones útiles que usemos comúnmente se puede hacer una clase "util" y luego métodos estáticos. Por ejemplo, yo suelo usar muy amenudo 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 <pre> y htmlspecialchars). Pues bien, me podría hacer una clase "util" con la función ahí:

class util {
static function
print_r_pre($v) {
echo
'<>' . 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 inclue 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 php5 y quieres ahorrarte mogollón de requiere_once. Las soluciones __autoload son para tí.