Bonjour,
Je me sers de l'autoload, et je constat que j'ai des erreurs de partout :
C'est vraiment regrettable, mon code marche parfaitement.Code:method x indefined
Comment peut t'on régler le problème ?
Version imprimable
Bonjour,
Je me sers de l'autoload, et je constat que j'ai des erreurs de partout :
C'est vraiment regrettable, mon code marche parfaitement.Code:method x indefined
Comment peut t'on régler le problème ?
Tu mets cette classe dans la racine de ton projet, et toutes les autres classes dans le répertoire "lib".Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 <?php class Autoloader{ public static function autoLoad($className, $dir = null){ if($dir == null){ $dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'lib'; } if($handle = opendir($dir)){ while(($file = readdir($handle)) !== false){ // Les noms des fichiers qui commencent par ".", // i.e. fichiers cachés, sont ignorés. if(substr($file, 0, 1) == '.'){ continue; } if(strcasecmp($file, "{$className}.php") == 0 && is_file("{$dir}/{$file}")){ require_once ("{$dir}/{$file}"); } else if(is_dir("{$dir}/{$file}")){ Autoloader::autoLoad($className, "{$dir}/{$file}"); } } } } } spl_autoload_register("Autoloader::autoLoad"); ?>
Et dans ton script appelant, tu inclus une et une seule fois cet Autoloader, il peut chercher récursivement dans le répertoire "lib" et charger la classe demandée, même quand les classes s'appellent entre elles.
Il faut que t'utilises des classes que dans les scripts appelant et les classes possedent le même nom que le fichier. i.e. tu déclare la classe User dans le fichier User.php
Alors petite modif pour moi, mes classe se trouve dans :
Donc je modie ton script :Code:
1
2inc/class
La modification est t'elle correct ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <?php class Autoloader{ public static function autoLoad($className, $dir = null){ if($dir == null){ $dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'inc/class'; } if($handle == opendir($dir)){ while(($file = readdir($handle)) !== false){ // Les noms des fichiers qui commencent par ".", // i.e. fichiers cachés, sont ignorés. if(substr($file, 0, 1) == '.'){ continue; } if(strcasecmp($file, "{$className}.php") == 0 && is_file("{$dir}/{$file}")){ require_once ("{$dir}/{$file}"); } else if(is_dir("{$dir}/{$file}")){ Autoloader::autoLoad($className, "{$dir}/{$file}"); } } } } } spl_autoload_register("Autoloader::autoLoad"); ?>
Et aussi tu as la variable $handle qui indéfini, peux tu coriger sa ?
Voila, merci pour tout ce boulot que tu as fourni.
huh ?! $handle == opendir($dir) est bien définie là.
C'est peut être une autre $handle?
Parce que cette fonction marche sur mon pc :aie:
$handle == opendir($dir)
Il y a un "=" en trop.
Avec quelle version de PHP vous l'utiliser ?
oui, metagoto a raison, merci.
J'utilise la dernière version wampserver, c'est du php5.3 je crois8-)