Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/04/2011, 11h51   #1
Membre confirmé
 
Avatar de UNi[FR]
 
nico.
Inscription : juin 2002
Messages : 327
Détails du profil
Informations personnelles :
Nom : nico.
Âge : 28

Informations forums :
Inscription : juin 2002
Messages : 327
Points : 294
Points : 294
Envoyer un message via MSN à UNi[FR]
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 :
1
2
3
4
Class User
{
 public function getAdresses() {...}
}
ou alors

Code :
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 !
__________________
Gnarf !
www.uni-d.net (Wamp MSS) - Mon C.V. - Mon Blog
.NET {VS 2010 && LINQ} && PHP {(Zend Studio || Notepad++) && (WAMP || WAMP mss)} && Multimédia {Flash CS5 && Photoshop CS5}

Pensez au TAG
UNi[FR] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 12h33   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Citation:
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 :
Addresse::search(array('id_user' => $user->id));
et là ça reste cohérent selon moi.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/04/2011, 14h55   #3
Membre confirmé
 
Avatar de UNi[FR]
 
nico.
Inscription : juin 2002
Messages : 327
Détails du profil
Informations personnelles :
Nom : nico.
Âge : 28

Informations forums :
Inscription : juin 2002
Messages : 327
Points : 294
Points : 294
Envoyer un message via MSN à UNi[FR]
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 ?
__________________
Gnarf !
www.uni-d.net (Wamp MSS) - Mon C.V. - Mon Blog
.NET {VS 2010 && LINQ} && PHP {(Zend Studio || Notepad++) && (WAMP || WAMP mss)} && Multimédia {Flash CS5 && Photoshop CS5}

Pensez au TAG
UNi[FR] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 15h13   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/04/2011, 15h29   #5
Membre confirmé
 
Avatar de UNi[FR]
 
nico.
Inscription : juin 2002
Messages : 327
Détails du profil
Informations personnelles :
Nom : nico.
Âge : 28

Informations forums :
Inscription : juin 2002
Messages : 327
Points : 294
Points : 294
Envoyer un message via MSN à UNi[FR]
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 ?
__________________
Gnarf !
www.uni-d.net (Wamp MSS) - Mon C.V. - Mon Blog
.NET {VS 2010 && LINQ} && PHP {(Zend Studio || Notepad++) && (WAMP || WAMP mss)} && Multimédia {Flash CS5 && Photoshop CS5}

Pensez au TAG
UNi[FR] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 15h49   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 16h15   #7
Membre confirmé
 
Avatar de UNi[FR]
 
nico.
Inscription : juin 2002
Messages : 327
Détails du profil
Informations personnelles :
Nom : nico.
Âge : 28

Informations forums :
Inscription : juin 2002
Messages : 327
Points : 294
Points : 294
Envoyer un message via MSN à UNi[FR]
c'est un peu ce que j'imaginé mais je voulais en discuter pour avoir des avis.

Merci bcp !
__________________
Gnarf !
www.uni-d.net (Wamp MSS) - Mon C.V. - Mon Blog
.NET {VS 2010 && LINQ} && PHP {(Zend Studio || Notepad++) && (WAMP || WAMP mss)} && Multimédia {Flash CS5 && Photoshop CS5}

Pensez au TAG
UNi[FR] est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h26.


 
 
 
 
Partenaires

Hébergement Web