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 :

Modélisation de classes [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Points : 448
    Points
    448
    Par défaut Modélisation de classes
    Bonjour j'ai une question concernant la modélisation des classes en PHP

    Imaginons une classe User et une classe Adresse
    un utilisateur posséde N adresses

    est-il plus judicieux de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class User
    {
     public function getAdresses() {...}
    }
    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class Adresse
    {
     public static function getAdresses(idUser) {...}
    }
    Dans le meilleur des mondes en terme de modélisation un objet User est-il autoriser à renvoyer des objets de type Adresse ?

    Merci d'avance pour votre aide !

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Dans le meilleur des mondes en terme de modélisation un objet User est-il autoriser à renvoyer des objets de type Adresse ?
    Oui bien sûr car la relation entre User et Adresse et une aggrégation.

    Non seulement la classe User doit pouvoir renvoyer une collection d'addresses par User::getAdresses mais elle devrait aussi porter cette collection dans un attribut. Il n'es pas faux non plus de permettre à partir d'une adresse de retrouver l'utilisateur avec Adresse::getUsers() (je mets au pluriel partant du principe que des utilisateurs peuvent partager une adresse, donc la classe Adresse devra renvoyer une collection d'utilisateur).

    Pour les collections, je te recommande un SplObjectStorage, c'est fait pour ça

    En tout cas, pas de Adresse::getAdresses($id_user) car ce sont les Utilisateurs qui portent les addresses et non pas l'inverse.
    Cela ne t'empêche pas de faire quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Addresse::search(array('id_user' => $user->id));
    et là ça reste cohérent selon moi.

  3. #3
    Membre averti
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Points : 448
    Points
    448
    Par défaut
    OK donc si je comprends bien il faut donc déclarer la fonction getAdresses dans ma classe User.

    Ma question va peut-être paraître bête mais dans quel cas utiliser une méthode statique ou une méthode de classe ?

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Une méthode de class (statique) est une méthode qui n'a pas besoin d'une instance pour être invoquée. Il n'y a pas vraiment de "cas" pour lesquels il est mieux de mettre une méthode de classe plutôt qu'une méthode d'instance, seulement sache que PHP éxécute les méthodes de classe 4x plus vite que les méthodes d'instance.
    Un exemple de méthode d'instance est un constructeur User::__construct ou bien User::getName car la propriété name n'est accessible que dans le contexte d'instance.
    Un exemple de méthode de classe est User::getUsers() (factory d'users) qui permet de récupérer une map d'instances User.
    Les méthodes de classes peuvent être appellées depuis un contexte d'instance. Exemple:
    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
     
    class User {
     
      public function __construct () {
        // ...
      }
     
      public static function getUsers () {
       // ...
      }
     
      public function getName() { return $this->name; }
    }
     
    $user = new User(1);
    $user->getUsers(); // est accepté
     
    User::getUsers(); // est accepté
    User::getName(); // va provoquer une erreur fatale à la rencontre du $this
    Note: en PHP toutes les méhtodes sont par défaut statiques ! Or si on rencontre un $this dans un contexte de classe (appel de par exemple), ça part en erreur. S'il n'y a pas de mot clé $this, ça va marcher et émettre un STRICT_STANDARD.

  5. #5
    Membre averti
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Points : 448
    Points
    448
    Par défaut
    Oui oui merci je connais bien la différence mais c'est toujours bon d'avoir un rappel !

    Ma question est pour l'exemple cité plus haut :
    Dois-je utiliser une fonction statique ou non pour récupérer la liste des adresses ?

    Quelle est la "meilleure" solution ?

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Dois-je utiliser une fonction statique ou non pour récupérer la liste des adresses ?
    La liste des adresse d'un utilisateur donnée nécessite un utilisateur valide. Le meilleur moyen est de construire un utilisateur puis de récupérer les adresses avec . Tu peux évidement te borner à faire des méthodes statiques partout mais dans ce cas, ton objet se limite à une structure.

  7. #7
    Membre averti
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Points : 448
    Points
    448
    Par défaut
    c'est un peu ce que j'imaginé mais je voulais en discuter pour avoir des avis.

    Merci bcp !

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

Discussions similaires

  1. Modélisation utilisant des classes/interfaces modeles
    Par X448GN dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 21/05/2008, 10h23
  2. [Séquence] Comment modéliser la table du SGBD à laquelle ma classe accède ?
    Par Mister Nono dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 18/04/2008, 18h37
  3. Modélisation : classe de logs
    Par Feriaman dans le forum C++
    Réponses: 5
    Dernier message: 08/04/2007, 22h30
  4. [DC] Modéliser une classe interface + une autre classe
    Par sangei dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 21/12/2005, 23h46
  5. [Class/PHP/Postgres] Problème de modélisation...
    Par k-reen dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/02/2003, 09h49

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