Les espaces de nom (namespace) et un autoload ne m'évitent pas un include
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:
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:
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:
1 2 3 4 5
| namespace _classes\rep_classes\MaClasse1;
class MaClasse1 {
public $varmaclasse1=1;
} |
_classes/rep_classes/MaClasse2.php :
Code:
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:
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 :
Citation:
Fatal error: Uncaught Error: Class '_classes\rep_classes\MaClasse1' not found in C:\wamp64\www\autoload\index.php on line 12