Bonjour,
J'aimerais savoir quelle est le niveau de visibilité qu'on doit donner à un attribut d'une classe en PHP ?
J'ai mis tous les attributs à private puis j'ai fait des getters, est ce correcte ?
Merci d'avance pour votre aide.
Bonjour,
J'aimerais savoir quelle est le niveau de visibilité qu'on doit donner à un attribut d'une classe en PHP ?
J'ai mis tous les attributs à private puis j'ai fait des getters, est ce correcte ?
Merci d'avance pour votre aide.
Salut !
Tout à fait, c'est correct
Pour plus d'info :
Les accès en PHP5
Si les mots clés public, private et protected existent, c'est pour qu'on s'en serve
C'est correct à condition de respecter les règles suivantes:
- si les getters/setters n'apportent rien de concrêt (il permettent juste la modification des propriétés sans faire aucun traitement ni contrôle) alors il vaut mieux que les propriétés en question soient publiques
- si les membres doivent être visibles par les classes filles, il faut impérativement utiliser protected
- si les membres n'ont pas à être visible dans les classes filles, il faut impérativement utiliser private
- le mot clé public est implicite, le mot clé var peut s'y substituer pour les propriétés (à éviter cependant, je préfère largement mentionner public, c'est plus lisible)
- la visibilité d'un membre ne peut pas être redéfinie dans la classe fille (illustré dans l'exemple #1)
- en PHP, il est possible de donner une visibilité virtuellement publique sur des membres privés/protégés à l'aide des méthodes magique __get,__set et __call (voir exemple #2)
Exemple #1 sur la visibilité
Exemple #2 sur les méthodes magiques
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 interface A { public function foo (); } class B implements A { protected function foo () {} // interdit } abstract class C { public function foo () {} abstract public function bar (); } class D extends C { protected function foo () {} // interdit protected function bar () {} // interdit }
Voilà, je crois que j'ai fait le tour dans les grandes lignes. Pour les reste, y'a toujours le manuel
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 class A { public $a = 1; protected $b = 2; private $c = 3; } $a = new A; $a->a = 2; // autorisé $a->b = 3; // interdit $a->c = 4; // interdit class B { public $a = 1; protected $b = 2; private $c = 3; public function __get ($key) { if ($key == 'a' || $key == 'b' || $key == 'c') return $this->$key; throw new InvalidArgumentException("$key not found"); } public function __set ($key, $value) { $this->__get($key); // comme ça on évite de réécrire le contrôle $this->$key = $value; } } $b = new B; $b->a = 2; // autorisé $b->b = 3; // autorisé grâce à __set et __get $b->c = 4; // autorisé grâce à __set et __get var_dump($b); class C { public function foo () { return __METHOD__; } protected function bar () { return __METHOD__; } public function __call ($method, $args) { if (!is_callable(array($this, $method))) throw new BadMethodCallException("$method not found"); return $this->$method(); } } $c = new C; echo $c->foo(); // autorisé echo $c->bar(); // autorisé par __call
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager