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 :

2 classes au nom identique [POO]


Sujet :

Langage PHP

Vue hybride

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut 2 classes au nom identique
    Bonjour,

    j'ai une architecture MVC en POO. Le but général est d'importer des fichiers CSV, puis de stocker les informations lues en BDD et de les rendre accessibles.

    Donc, évidemment, j'ai une action d'import de fichiers. Celle-ci va s'occuper de l'upload, puis du stockage en BDD et termine par un affichage de ce qui a été fait. Cette action va donc correspondre à une classe du contrôleur. Par contre, le stockage en BDD va être pris en charge par une classe du modèle.
    Au départ, j'avais nommé les 2 classes CSVImport, mais vu le message d'erreur (du genre already used), j'ai renommé la classe du contrôleur en CSVImportC, ce qui a effectivement supprimé l'erreur.
    Peut-on me confirmer qu'il est interdit de donner un nom identique à 2 classes appartenant à un espace de noms différent ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Par défaut
    Bonjour,

    De manière basique, je te confirme que l'on ne peut pas utiliser 2 fois le même nom de class, PHP détecte un conflit et lève une erreur fatale.

    C'est justement là qu'interviennent les namespace : https://www.php.net/manual/fr/language.namespaces.php

    Pour moi les namespace sont surtout utilisés par les librairies, pour éviter justement les collisions de nom de class avec d'autres librairies qui seraient chargées dans la même application.

    Dans ton cas je pense qu'il serait effectivement beaucoup plus légitime de prefixer ou postfixer le nom des class, par exemple sur ce modèle là dans le cas d'une structure MVC : "CSVImportModel","CSVImportControler","CSVImportView"

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Deux classes peuvent avoir le même nom tant qu'elle sont dans un espace de nommage différent.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    OK, mais alors si on a ce type de code :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    use ticket_rawsrc\model\CSVImport;
    use ticket_rawsrc\controller\CSVImport;
     
    $ref_CVSImport = new CSVImport();
    comment indique-t-on que le new concerne l'espace de nom model ou controller ?

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu ne peux pas faire un use des deux classes évidemment , tu dois en spécifier au moins une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    use ticket_rawsrc\model\CSVImport;
     
    $model = new CSVImport();
    $controller = new ticket_rawsrc\controller\CSVImport();
    Dans ce cas précis je ne spécifierais pas de use pour définir le nom complet de la classe à chaque fois. C'est un peu plus lourd mais il n'ya pas de confusion possible à la lecture.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut le cie,

    comme je passais par là, j'en profite pour répondre à au moins une question.
    euh, il faut utiliser les alias, ils sont faits pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    use ticket_rawsrc\model\CSVImport as CSVImportModel;
    use ticket_rawsrc\controller\CSVImport;
     
    $ref_CVSImport = new CSVImport();
    $mod_CVSImport = new CSVImportModel();
    Quant t'utilises des espaces de nom, on parle de nom pleinement qualifié pour une classe. Tant que ce nom est unique dans son ensemble, tout est bon.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/06/2008, 19h30
  2. Cellules avec un début de nom identiques
    Par Danae123 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/06/2007, 14h24
  3. [JDO][JPOX] nom de la classe et nom de la table
    Par Nexussmb dans le forum Persistance des données
    Réponses: 2
    Dernier message: 25/05/2007, 14h18
  4. POST : champs avec des noms identiques ou des IDs ?
    Par Luke58 dans le forum Langage
    Réponses: 1
    Dernier message: 24/05/2007, 12h25
  5. CSS nom identique
    Par TangoZoulou dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 06/12/2006, 16h24

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