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
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;
mes classes

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 affiche
GSP\creance\Creance
puis au final
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
(alors que le namespace est bien déclaré en ligne 3 après la balise php)

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