[POO] Restreindre Get et Set à certaines valeurs ?

Restreindre Get et Set à certaines valeurs ? [POO] - PHP - Programmation

Marsh Posté le 25-04-2007 à 18:46:07    

Salut à tous,
 
Voilà, j'aurais aimé savoir comment restreindre (si c'est possible) l'utilisation des accesseurs uniquement à certaines valeurs.
 
Par exemple, comme faire pour que je puisse lire la variable $var1 et pas $var2 et $var3... et modifier $var2 et $var3, mais pas $var1 ?
 

Code :
  1. private $var1;
  2. private $var2;
  3. private $var3;
  4. //Getter
  5. public function __get($value)
  6. {
  7. if(isset($this->$value))
  8. {
  9.  return $this->$value;
  10. }
  11. }
  12. //Setter
  13. public function __set($var, $value)
  14. {
  15. if(isset($this->$var))
  16. {
  17.  $this->$var = $value;
  18. }
  19. }


 
Merci d'avance pour vos réponses,
Lionel.


Message édité par pot2yaourt le 25-04-2007 à 20:24:26
Reply

Marsh Posté le 25-04-2007 à 18:46:07   

Reply

Marsh Posté le 25-04-2007 à 21:19:27    

public setVar1($value)
public setVar2($value)
 
...

Reply

Marsh Posté le 25-04-2007 à 22:55:47    

Les __get et __set de PHP c'est de la daube :/

 

C'est merdique à utiliser comme properties de membres existants, autant passer par des getters et setters, c'est moche mais au moins c'est utilisable.

Message cité 2 fois
Message édité par masklinn le 25-04-2007 à 23:00:27

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 25-04-2007 à 23:08:06    

masklinn a écrit :

Les __get et __set de PHP c'est de la daube :/
 
C'est merdique à utiliser comme properties de membres existants, autant passer par des getters et setters, c'est moche mais au moins c'est utilisable.


 
Bof, ca dépend comment tu les utilises. Moi j'ai fait un truc a base de protected préfixés pour savoir s'ils sont read-only ou pas, s'il on un type forcé ou pas et éventuellement un sous-range. Le nom des membres internes est long, mais ca permet de travailler avec un minimu de contrôle sur ce que les gens veulent foutre comme valeur dans un objet. Ca évite pas mal de bug de faute de frappe également.

Reply

Marsh Posté le 26-04-2007 à 09:37:40    

masklinn a écrit :

Les __get et __set de PHP c'est de la daube :/
 
C'est merdique à utiliser comme properties de membres existants, autant passer par des getters et setters, c'est moche mais au moins c'est utilisable.


+1
 
je prefere utiliser des getter et setter spécifique a chaque variable. PHP a pas mal progressé en POO , mais il y a encore un peu de marge  
 

Reply

Marsh Posté le 26-04-2007 à 09:50:14    

flo850 a écrit :

+1
 
je prefere utiliser des getter et setter spécifique a chaque variable. PHP a pas mal progressé en POO , mais il y a encore un peu de marge


euh ouais mais non, parce que si tu contrainds pas tes objets, tu peux avoir ca:
 

Code :
  1. class Toto {
  2.   public $variable;
  3. }
  4. $tutu = new Toto();
  5. $tutu->variable2='WTF?!';
  6. echo $tutu->variable2;


 
Et tout va marcher comme si de rien n'etait...

Reply

Marsh Posté le 26-04-2007 à 10:05:17    

le fait de contraindre ne vas rien apporter à celui qui as crée la classe si ?
 
Je ne vois pas l'intérêt de contraindre si ce n'est pour que l'objet ne contienne et ne serve qu'a ce que le concepteur à prévus... ce qui ne vaut que pour les classes qui sont exportée.. (enfin c'est ma vision des choses.)

Reply

Marsh Posté le 26-04-2007 à 10:08:52    

Parce que tu ne fais jamais de faute de frappe? La contrainte, c'est pas juste pour faire joli, c'est aussi la pour reduire le temps de debugging.

Reply

Marsh Posté le 26-04-2007 à 10:13:41    

C'est une bonne approche  de ne pas permettre d'acceder directement aux membre d'une classe. Ne serait ce que parceque le but de la classe est de permettre une certaine modularité, et que l'accès a un membre detruit cette portabilité  
 
Programmer proprement, ce n'est pas quelque chose qu'on fait pour les autres, c'est quelque chose qu'on fait pour gagner du temps

Reply

Marsh Posté le 26-04-2007 à 10:14:54    

Ba si des fautes de frappes ça m'arrive bien évidement, mais il ne faut pas que le temps passé à contraindre la classe dépasse le temps gagné lors du debugging. barf .. à étudier donc :D

 

EDIT : Le fait de ne pas contraindre la classe, ne signifie pas que le code n'est pas propre, ni moins portable. Si tu fais une méthode pour accéder à chacune des variables de l'objet, à un moment ça va devenir super lourd (surtout si tu viens différencier la lecture et l'écriture).

Message cité 1 fois
Message édité par chani_t le 26-04-2007 à 10:18:50
Reply

Marsh Posté le 26-04-2007 à 10:14:54   

Reply

Marsh Posté le 26-04-2007 à 10:18:14    

chani_t a écrit :

Ba si des fautes de frappes ça m'arrive bien évidement, mais il ne faut pas que le temps passé à contraindre la classe dépasse le temps gagné lors du debugging. barf .. à étudier donc :D


 
Allo la terre? les notions d'heritage, de final, ca te dis rien?

Reply

Marsh Posté le 26-04-2007 à 10:24:26    

gizmo a écrit :

Allo la terre? les notions d'heritage, de final, ca te dis rien?


Ba si, ça me dis quelque chose, cependant j'avoue ne pas avoir encore eu l'occasion de mettre en oeuvre une classe nécessitant d'hériter d'une autre.. (ba chuis qu'un développeur PHP du dimanche ;) ). En même temps qu'est ce que ça change dans notre histoire ?  (pis te fache pas, j'essaie de comprendre ;) )

Reply

Marsh Posté le 26-04-2007 à 10:31:11    

bah tu fais une fois ta restriction sur ta classe abstraite et ensuite toutes tes autres classes en herite, et basta, plus besoin de refaire le bordel.

Reply

Marsh Posté le 26-04-2007 à 10:48:22    

gizmo a écrit :

euh ouais mais non, parce que si tu contrainds pas tes objets, tu peux avoir ca:

 
Code :
  1. class Toto {
  2.   public $variable;
  3. }
  4. $tutu = new Toto();
  5. $tutu->variable2='WTF?!';
  6. echo $tutu->variable2;



Ouais mais ça ça a aucun rapport, tu peux faire un __get et un __set qui balancent une erreur/exception et c'est terminé [:petrus75]

Message cité 1 fois
Message édité par masklinn le 26-04-2007 à 10:55:01

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-04-2007 à 11:04:21    

masklinn a écrit :

Ouais mais ça ça a aucun rapport, tu peux faire un __get et un __set qui balancent une erreur/exception et c'est terminé [:petrus75]


bah ouais, c'est ce que je dit :o  
Sauf que dans mon cas, ca fait des trucs en plus pour la validation des donnees.

Reply

Marsh Posté le 27-04-2007 à 17:02:35    

__get et __set peuvent (au conditionnel) servir pour les objets fortement manipulables.
 
Mais il est clair qu on peut se poser des questions quand a leurs utilites.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed