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 :

héritage d'une classe. Classe mère pas dans le même namespace que la classe fille [POO]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 374
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut héritage d'une classe. Classe mère pas dans le même namespace que la classe fille
    Bonsoir,

    voici mon architecture :
    model
        license
            table
                Applications.php
        ticket
            table
                Products.php
    
        Collection.php
    
    Les 3 fichiers PHP comportent la déclaration de 3 classes. Les classes Applications et Products héritent toutes les 2 de la classe Collection. Les espaces de noms sont respectivement namespace ticket_rawsrc\model\license\table; namespace ticket_rawsrc\model\ticket\table; et namespace ticket_rawsrc\model;. Si toutes les classes étaient dans le même espace de nom, on pourrait écrire par exemple class Applications extends Collection pour déclarer que Applications hérite de Collection. Mais avec ces espaces de nom étant différents pour les 3 classes, comment on écrit ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    Il est possible d'utiliser le nom d'espace dans l'héritage class Applications extends \ticket_rawsrc\model\Collection.

    Ou bien utiliser un use ticket_rawsrc\model\Collection avant de déclarer la classe fille :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    use ticket_rawsrc\model\Collection;
    class Application extends Collection{
    }

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 374
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    Merci,
    suite à un conseil hors DVP, j'ai adopté la 2e solution.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut
    Bonjour

    Pour le cas d'usage ici présent, je préfère la première solution càd class Applications extends \ticket_rawsrc\model\Collection ... parce que cela fait un use en moins ;-)

    Si quelqu'un pense que la seconde syntaxe est meilleure; je suis preneur de vos remarques (pourquoi serait-ce meilleur ?)
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 374
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ça ne me pèse pas de rajouter une ligne de code (le use). Ca te gène ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Bonjour,

    ça ne me pèse pas de rajouter une ligne de code (le use). Ca te gène ?
    Pour ce seul et unique usage ? Oui, c'est de la "pollution". Tu peux créer une classe en faisant un extends et, à cet endroit, préciser le FQN (Full qualified name). Pourquoi dès lors ne pas le faire ?
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  7. #7
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    Parmi les avantages de l'utilisation de use, c'est qu'on peut utiliser des alias de nom d'espace comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    use ticket_rawsrc\model\Collection as unAlias;
    //maintenant on peut utiliser "unAlias" au lieu d'écrire tout le nom d'espace 
    class Application extends unAlias{
    }

  8. #8
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Parmi les avantages de l'utilisation de use, c'est qu'on peut utiliser des alias de nom d'espace comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    use ticket_rawsrc\model\Collection as unAlias;
    //maintenant on peut utiliser "unAlias" au lieu d'écrire tout le nom d'espace 
    class Application extends unAlias{
    }
    En effet @Toufik83 mais strictement si tu as besoin de le faire pour éviter un conflit avec une autre classe Collection. Dans le cas présenté ci-dessus (en l'absence du besoin d'un alias), nul intérêt à ajouter cette ligne use. Enfin, ici on parle de goûts et de couleurs ;-)
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  9. #9
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Oui cavo789, je suis d'accord que dans ce cas le use n'est pas vraiment nécessaire.

    et comme tu as dit c'est une question de goût....

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Oui cavo789, je suis d'accord que dans ce cas le use n'est pas vraiment nécessaire.

    et comme tu as dit c'est une question de goût....
    Il existe une règle générale qui dit que moins un développeur écrit (ou doit écrire) de lignes de code, mieux il se porte (et son programme aussi). En conséquence, ajouter une ligne de code lorsque ce n'est pas nécessaire n'est pas une question de goût, c'est plutôt une mauvaise pratique. ABE

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    Citation Envoyé par noroot Voir le message
    Bla bla...
    Tout d'abord on dit bonjour lorsqu'on veut répondre à une discussion, puis je ne vois pas en quoi ça nous aidera ta réponse inutile ?

    surtout que tu viens à peine de t'inscrire sur DVP.

    pas la peine de faire la malin et s'inscrire avec un nouveau compte seulement pour provoquer les autres..., c'est un comportement d'adolescence.

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    La bonne solution c'est celle qui vous convient j'ai envie de dire .

    Les deux sont possibles , les deux ont des arguments qui se tiennent.

    En règle général les linter poussent pour l'utilisation de use plutôt que du nom complet , mais à part ca ...
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/02/2021, 23h03
  2. Réponses: 1
    Dernier message: 20/09/2013, 10h02
  3. Réponses: 13
    Dernier message: 23/05/2013, 20h38
  4. Réponses: 6
    Dernier message: 22/07/2010, 15h17
  5. héritage d'une classe pas dans le meme package
    Par marry dans le forum Général Java
    Réponses: 14
    Dernier message: 07/05/2009, 18h14

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