Bonjour,
je pense avoir suivi scrupuleusement le billet de blog de rawsrc, et pourtant, ça échoue (fatal error) alors que c'est bon si je mets des include. Qu'est-ce qui ne va pas ?
index.php :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 use _classes\rep_classes\MaClasse1; use _classes\rep_classes\MaClasse2; //autoloading include_once 'Autoloader.php'; Autoloader::register(); $obj = new MaClasse1(); $obj2 = new MaClasse2(); // Inclusion des fichiers principaux include_once '_functions/functions.php'; debug($obj); debug($obj2);
autoload.php :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 class Autoloader { static function register() { define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR); $autoloader = function($full_class_name) {echo "autoloader 7<br/>"; // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name); // on construit le chemin complet du fichier à inclure :a // il faut que l'autoloader soit toujours à la racine du site $path = DIR_ROOT.$name.'.php'; // on vérifie que le fichier existe et on l'inclut // sinon on passe la main à une autre autoloader (return false) if (is_file($path)) { include $path; return true; } else { return false; } }; spl_autoload_register($autoloader); } }
_classes/rep_classes/MaClasse1.php :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 namespace _classes\rep_classes\MaClasse1; class MaClasse1 { public $varmaclasse1=1; }
_classes/rep_classes/MaClasse2.php :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 namespace _classes\rep_classes\MaClasse2; class MaClasse2 { public $varmaclasse2=2; }
code de index.php qui marche (si j'enlève les lignes namespace dans les 2 fichiers de classe) :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 include_once "_classes/rep_classes/MaClasse1.php"; include_once "_classes/rep_classes/MaClasse2.php"; $obj = new MaClasse1(); $obj2 = new MaClasse2(); // Inclusion des fichiers principaux include_once '_functions/functions.php'; debug($obj); debug($obj2);
(la fonction debug est une version améliorée de var_dump)
message d'erreur :Fatal error: Uncaught Error: Class '_classes\rep_classes\MaClasse1' not found in C:\wamp64\www\autoload\index.php on line 12
Partager