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

PHP & Base de données Discussion :

Résoudre l'injection de dépendances des classes abstraites


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Finlande

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut Résoudre l'injection de dépendances des classes abstraites
    Bonjour,

    J'ai installé php-di dans un projet. Voici le problème en résumé :

    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
    abstract class A
    {
    abstract public function fun(): string;
    }
     
    class B
    {
        protected A $a;
     
        public function __construct(A $a)
        {
            $this->a= $a;
        }
        public function fun(): bool
        {
            return true;
        }
    }
    voici l'erreur :
    Uncaught error: abstract class can not be instantiated.
    Comment résoudre ce problème ?

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    On ne peux pas instancier une classe abstraite.
    Hors dans votre code vous essayer d'injecter une classe abstraite.

    Vous devez étendre votre classe A avant de pouvoir l'utiliser.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Finlande

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Merci de votre réponse.
    Je tiens à vous préciser que je n'injecte pas la classe abstraite A dans le constructeur mais plutôt un objet de type A (type hinting).
    J'ai une autre classe C qui étend A. Ensuite j'injecte C dans le constructeur de la classe B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class C extends A
    {
        ...
    }  
     ensuite dans le fichier index :
     
    $container = new Container();
    $var = $container->get(B::class);
    PHP Fatal error: the class is not instantiable

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Le principe est bon, montre ton code.

    Ex. ceci fonctionne :

    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
    37
    38
    <?php
     
    abstract class A
    {
        abstract public function fun(): string;
    }
     
    class B
    {
        protected A $a;
     
        public function __construct(A $a)
        {
            $this->a= $a;
        }
     
        public function fun(): bool
        {
            return true;
        }
    }
     
    class C extends A
    {
        public function __construct()
        {
     
        }
     
        public function fun(): string
        {
            return 'C';
        }
    }
     
    $b = new B(new C());
     
    print_r($b);

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Finlande

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Merci encore pour ta réponse. Oui effectivement ça fonctionne sans passer par php-di. J'ai résolu le problème en passant l'objet C à la classe B avant d'initialiser cette dernière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $c = new C();
    $container = new Container();
    $container->set('B', $c);
    $var= $container->get('B', [ 'a' => $c,]);

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

Discussions similaires

  1. A propos des classes abstraites
    Par zied_m dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 04/01/2012, 23h20
  2. boost.python : générer les conversions to_python pour des classes abstraites
    Par Blustuff dans le forum Interfaçage autre langage
    Réponses: 2
    Dernier message: 02/08/2011, 11h08
  3. L'intérêt des classes abstraites face au interfaces
    Par diopahmadou dans le forum Langage
    Réponses: 2
    Dernier message: 07/12/2009, 10h43
  4. [classe abstraite] gestion des classes abstraites en memoire
    Par noOneIsInnocent dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2007, 11h53
  5. A propos des classes abstraites
    Par OhLiberty dans le forum C++
    Réponses: 5
    Dernier message: 15/09/2006, 19h11

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