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 la instanciación 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 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 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 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 PHP 5 y quieres ahorrarte multitud de requiere_once. Las soluciones __autoload son para ti.