Salut, il s'agit de mon premier post dans la section PHP,

Je travaille en ce moment sur un projet perso, bref les détails ne sont pas important, je me suis arrété cependant sur un point qui m'a choqué lors de l'écriture d'une classe.

Je m'explique, j'écrit le code qui suit :

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
<?php
        class A {
                private $data;
                public function __get($att) {
                        echo "<p>appel A::__get</p>";
                        return $this->data[$att];
                }
                public function __set($att, $val) {
                        echo "<p>appel A::__set</p>";
                        $this->data[$att] = $val;
                }
                public function __construct() {
                        echo "<p>const A</p>";
                }
        }
        class B extends A {
                public function __construct() {
                        echo "<p>const B</p>";
                        parent::__construct();
                }
        }
        $a = new A;
        $b = new B;
        $b->var = "ma var";
        echo $b->var;
?>
vous constaterez que ma classe A possède une propriété en private $data à la quelle je peux librement accéder au travers des méthodes magiques __set et __get de la classe B qui en hérite (qui sont elles déclarées en public).
Je me pose donc des questions sur ce qu'il en est au niveau du respect de l'encapsulation des objets en php...
Dois-je déclarer les méthodes __get et __set en private et déclarer derrière des méthodes public pour accéder aux propriétés que je souhaite rendre public ?

Merci