Browsing this Thread:
1 Anonymous Users
Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
3/3 13:50 Group:
Utilisateurs Enregistrés Posts:
3
Level : 1; EXP : 10
HP : 0 / 2 MP : 1 / 3 ![]() |
Bonjour,
étant un peu nouveau dans le langage objet, j'ai une question que je me pose. J'ai une class client qui possède beaucoup de propriétés. Ces propriétés correspond à des données sur Oracle. Pour les alimenter, j'ai besoin de faire plusieurs requêtes. Je ne veux pas les alimenter dans le constructeur parce que si jamais j'ai besoin de 2 ou 3 propriétés il va faire des requêtes de trop. Donc je me demande s'il y a une bonne pratique pour cette situation là . Est-ce que doit faire quelques méthodes qui va permettre d'affecter un certain nombre de ses propriétés? Ou faire plusieurs constructeurs? Merci
Posted on: 3/3 14:19
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
2009/7/7 15:55 Group:
Utilisateurs Enregistrés Posts:
14
Level : 2; EXP : 50
HP : 0 / 37 MP : 4 / 117 ![]() |
Une bonne pratique, utilisée en Java, C# et Zend Framework par exemple, c'est de créer un accesseur et modifieur de propriété pour chacune de tes variables, donc deux méthode publiques par variables.
Tu aurais par exemple:
et ce pour chacune de tes propriétés, ça te permet d'assigner des valeurs au besoin... une autre bonne pratique c'est de mettre 'null' par défaut lorsque tu définis tes variables.
Posted on: 3/3 15:25
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
3/3 13:50 Group:
Utilisateurs Enregistrés Posts:
3
Level : 1; EXP : 10
HP : 0 / 2 MP : 1 / 3 ![]() |
Merci pour la réponse
....j'ai bien compris ca. Ils sont utilisé pour accéder à mes propriétés. En php, il y un méthode magique qui fais ca pour chaque propriété ou il n'y a pas de méthodes de spécifiées: __get. Mais ma question n'est pas sur le fait de comment avoir accès à mes propriétés et de les modifier à l'extérieur de la classe mais comment les affecter à l'intérieur de ma classe via des requête sur Oracle. Lorsque je fais un:
Je peux affecter tous mes propriétés dans le constructeur en faisant plusieurs requêtes Oracle. Mais je ne veux pas faire ca parce que je ferai beaucoup trop de requête pour rien si je cherche seulement à avoir les données de 1-3 propriétés. Je pourrai créer des méthodes qui permet d'aller chercher quelques données selon ce que je demande:
Mais je ne sais pas si c'est la bonne manière. Je peux aussi, dans la méthode get, vérifier si la propriété a été affecté sinon d'appeler la fonction correspondant à la table où le champ se trouve et de l'affecter..... Il doit avoir surement une façon de faire... Merci
Posted on: 3/3 15:53
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
2009/7/7 15:55 Group:
Utilisateurs Enregistrés Posts:
14
Level : 2; EXP : 50
HP : 0 / 37 MP : 4 / 117 ![]() |
OK je comprend mieux... Première chose à voir, c'est de regarder si tu peux pas aller chercher toutes ces données avec un join SQL. Dans la plupart des cas, un 'join' sur quelques tables qui retourne toutes les données d'un coup, si les index necessaires sont présents, va être beaucoup plus performant que de faire deux (ou plus) requêtes séparées.
Maintenant, si t'as vraiment besoin de faire x requêtes pour aller chercher toutes tes données, dans bien des systèmes j'ai vu un peu ce que tu expliques:
Tu pourrais en effet faire en sorte que ton 'get' qui va chercher la valeur regarde si y'a déjà une valeur, sinon charge la valeurs (et les autres données associées) de la BD... Mais tout ça me parait farfelu. Si t'es pas capable d'aller checher toutes tes infos associées à un client d'un coup avec un join, c'est que t'as un problême de design de ta BD à mon avis...
Posted on: 3/3 16:10
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
2009/7/27 18:18 Group:
Utilisateurs Enregistrés Posts:
2
Level : 1; EXP : 2
HP : 0 / 0 MP : 0 / 2 ![]() |
Une des raisons pour lesquels l'utilisation des get/set sont fortement recommandé, c'est que tu peux ajouté le code que tu veux quand certaines propriétés sont demandées.
Dans ton cas, la structure qui serait intéressante ce serait quelque chose dans le genre :
class Client {
Posted on: 3/6 17:54
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Webmestre
![]()
Joined:
1969/12/31 19:00 From Montréal
Group:
Webmestres Utilisateurs Enregistrés Organisation Posts:
413
Level : 18; EXP : 90
HP : 0 / 447 MP : 137 / 53067 ![]() |
Note que tu peux aussi regarder du côté des méthodes magiques __get et __set
Posted on: 3/6 21:30
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
3/3 13:50 Group:
Utilisateurs Enregistrés Posts:
3
Level : 1; EXP : 10
HP : 0 / 2 MP : 1 / 3 ![]() |
Good!!
Merci beaucoup pour toutes ses réponses....
Posted on: 3/8 8:56
|
|
Transfer
|
||
Re: Php5 objet client |
||
|---|---|---|
|
Nouveau
Joined:
3/9 11:07 Group:
Utilisateurs Enregistrés Posts:
1
Level : 1; EXP : 0
HP : 0 / 0 MP : 0 / 0 ![]() |
Une autre solution serait:
class Client { private $no; private $annee; private $municipalite; private $ExtendedInfo = false; [...] public function getNo() { return $this->no; } public function getAnnee() { return $this->annee; } public function getMunicipalite() { $this->loadExtended(); return $this->municipalite; } [...] private function loadBasic() { //tu l'appelles dans le constructeur } private function loadExtended() { if (!this->ExtendedInfo) { //charger les autres infos, SQL, affecter les attributes, etc... $this->ExtendedInfo = true; } } }
Posted on: 3/9 11:16
|
|
Transfer
|
||
You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.






Transfer

14th Aug

