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