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.
Diciembre 29th, 2007 at 12:19 am
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.
Diciembre 29th, 2007 at 12:32 am
@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
Diciembre 29th, 2007 at 12:34 am
oooh
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?
Diciembre 29th, 2007 at 12:43 am
@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.