Cuando trabajamos con objetos en php, debemos cargar previamente los archivos que contienen las clases que queramos instanciar.
Cuando trabajamos con muchos archivos de clases, la función __autoload nos automatiza el uso de includes/requires para dichos archivos.
__autoload nos evita tener que escribir un require/include por cada nueva clase que queramos instanciar, vemos un ejemplo:
function __autoload($nombre_de_clase) {
require_once $nombre_de_clase . '.php';
}
$objeto1 = new Clase1();
$objeto2 = new Clase2();
?>
En éste ejemplo al crear $objeto1 y $objeto2 se harán los correspondientes require_once para cada clase y, de no encontrar el archivo con el mismo nombre de la Clase en cuestión, dará error.
pero la funcion hace lo mismo que lo que hicieras a mano, no le hayo mucha importancia a la funcion en si, a lo mejor si pudiera haceptar un array para declarar todas las clases que quieras usar asi si le agarraria uso.
como:
function __autoload($clase_s) {
if(is_array($clase_s)){
foreach($clase_s as $clase)
require_once $clase . ‘.php’;
}elseif(is_string($clase_s)){
require_once $clase_s . ‘.php’;
}else
//mandar error
}
bueno pues ese es mi punto de vista aunke casi no trabajo con objetos.
@iTony, la “gracia” de ésta funcion es que tu no necesitas llamarla para nada en ningún momento.
Cuando creas un objeto nuevo de ésta forma: $objeto = new Nombre_Clase(); la función __autoload es llamada automáticamente (si antes no has hecho un require del archivo que contiene la clase) y le pasará como parámetro el valor “Nombre_Clase”.
En definitiva es una función “para vagos” o despistados que, desde mi punto de vista, esta bien conocer pero desde luego es mejor cargar los requires a mano.
Un saludo
oooh :P necesito saber mas sobre objetos y clases en php gracias por el tip. y es llamada automaticamente porque el nombre ya es una constante del sistema o porque?
@iTony es una característica propia de php5, parecida a los métodos __get/__set, si php ve que instancias una clase que él no encuentra definida en tu script, llama automáticamente a __autoload para darte una última oportunidad antes de mostrar un error.