Bonjour à tous,
ma classe Autoloader fonctionne bien avec 1 classe "simple", mais il plante lorsque il va chercher une classe héritière.
le script d'exécution commence par
mes classes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 use GSP\creance\{Creance, CreanceConso, CreancePro}; // signifie utilise les objets créance, créancePro et créance conso du namespace GSP\creance use GSP\personne\{Personne,PersonneManager}; use GSP\Autoloader;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php namespace GSP\creance; use DateTime; abstract class Creance {...}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php namespace GSP\creance; class CreancePro extends Creance {...}
ma classe Autoloader
Code : 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
25
26
27
28
29
30
31
32
33
34
35
36 <?php namespace GSP; class Autoloader { static function register() { spl_autoload_register([ __class__, 'autoload' ]); } static function autoload($class) { var_dump ($class); echo __namespace__; $class=str_replace(__namespace__ . '\\','',$class); var_dump ($class); echo 'ligne 21 ->' . __DIR__ . '\\'. $class . '.php'; $cheminFichier =__DIR__ . '\\'. $class . '.php'; var_dump($cheminFichier); echo'autoloader->ligne 24 </br>'; if(file_exists($cheminFichier)){ echo'autoloader ligne 26-> le fichier '.$cheminFichier.' existe. </br>'; require_once $cheminFichier; echo'</br> Autoload de la classe "'.$class.'.php" réalisé !'; }else{ echo'</br> Echec de l\'autoload !'; } } }
L'autoloader fonctionne avec ma Classe Personne.php située dans namespace GSP\personne
En revanche dans GSP\creance j'ai 1 classe abstraite Creance et deux héritières CreancePro et CreanceConso
et sur un $creance1=new CreancePro , l'autoloder va jusqu'à la ligne 26 correctement (autoloader ligne 26-> le fichier https://www.developpez.net/forums/C:\wamp64\WWW...\classes\creance\CreancePro.php existe) et s'interrompt sur la ligne 27,
remonte sur la ligne 16 et affichepuis au finalGSP\creance\Creance(alors que le namespace est bien déclaré en ligne 3 après la balise php)Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in https://www.developpez.net/forums/C:\wamp64\www\...\classes\creance\Creance.php on line 3
c'est à dire que le chemin d'accès à la classe héritière qui est correct jusqu'à la ligne 26... se trouve au niveau du require_once de la ligne 27 remplacé par le chemin de la classe parent ??
merci de vos conseils
Partager