autoload classe héritière
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:
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:
1 2 3 4 5 6
| <?php
namespace GSP\creance;
use DateTime;
abstract class Creance
{...} |
Code:
1 2 3 4
| <?php
namespace GSP\creance;
class CreancePro extends Creance
{...} |
ma classe Autoloader
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 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
Citation:
GSP\creance\Creance
puis au final (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 ?:roll:?
merci de vos conseils :)