Re,
Le manuel php étant plutôt clair sur ce sujet, je mets le lien qui va bien :
http://www.php.net/manual/fr/language.oop5.autoload.php
quelques précisions par rapport à ce que tu as ajouté :
- __autoload() doit être une fonction isolée, pas une méthode de classe.
- tu n'appelles jamais __autoload(). C'est php qui l'appelle pour toi. Tu te contentes de la définir quelquepart dans ton code (par exemple dans ton config.php) et de mettre dedans le code utile que tu trouveras adapté, sachant que lors de l'appel de cette fonction, la fonction reçoit un nom de classe en paramètre, et php cherche à disposer de cette classe pour instancier un objet. C'est donc ta "dernière chance" d'inclure la définition de la classe pour php avant que l'instanciation de l'objet n'échoue avec une erreur.
Un exemple :
index.php
<?php function __autoload($classe) {
require_once $classe . '.php';
}
// C'est ici que tout se passe !
// PHP va inclure les fichiers juste avant de réaliser l'instanciation de l'objet
//(qu'il n'aurait pas pu faire sans, puisque la classe est définie dans un autre fichier).
$x=new ma_class_fille();
$x->ma_methode();
ma_class_fille.php
<?php
Class ma_class_fille extends xxxx{
public $a, $b, $c;
function ma_methode(){
echo "ok";
}
//...
}
xxxx.php
<?php Class xxxx{
//...
}
Si tu as encore des doutes, prends cet exemple, retire la fonction __autoload(){ ... } et sers toi uniquement de
require_once() pour faire fonctionner un code équivalent. L'intérêt est un peu mince avec deux classes, mais à partir de 10 ça devient tout de suite plus évident.
++ et bonne poo
