IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

autoload classe héritière [POO]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    débutant
    Inscrit en
    mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : mai 2016
    Messages : 21
    Points : 24
    Points
    24
    Par défaut 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 : 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

  2. #2
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : janvier 2017
    Messages : 335
    Points : 714
    Points
    714
    Par défaut
    Bonsoir,
    Citation Envoyé par jean-simon Voir le message
    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 ??
    Non, en fait le require_once fonctionne bien avec le fichier CreancePro.php, mais dans ce fichier il y a un extends Creance qui entraîne un nouvel appel "autoload" qui va chercher la classe Creance.
    L'erreur semble se situer dans le fichier "Creance.php" : peut-être un espace en début de fichier ou un encodage avec BOM...

  3. #3
    Membre à l'essai
    Homme Profil pro
    débutant
    Inscrit en
    mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : mai 2016
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    merci,
    je vais chercher de ce côté...

  4. #4
    Membre à l'essai
    Homme Profil pro
    débutant
    Inscrit en
    mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : mai 2016
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    bravo !
    une erreur dans le constructeur
    Merci !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/12/2015, 12h58
  2. Comment utiliser les attributs d'une classe héritière ?
    Par neufrdb dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 04/04/2011, 20h20
  3. [ZF 1.8] Utiliser l'autoload pour mes classes
    Par guiyomh dans le forum MVC
    Réponses: 4
    Dernier message: 30/07/2009, 10h36
  4. [ZF 1.8] Autoload et classe non trouvée
    Par titou_777 dans le forum Zend Framework
    Réponses: 2
    Dernier message: 25/06/2009, 17h37
  5. [PHP 5.2] conseil class autoload
    Par gtraxx dans le forum Langage
    Réponses: 5
    Dernier message: 05/02/2009, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo