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 ton message est résolu, il y a un bouton qui est fait pour ça :
Il se trouve tout en bas de la conversation !
N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant
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
On vous a menti
PHP, Injection de dépendances et composants
La POO en PHP en 10 minutes pour moins
Suivez-moi sur GitHub et Twitter
N'oubliez pas de vous servir des bouttons , et
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