par
Hywan » 26 juil. 2009, 20:59
Hey

,
Je ne sais pas comment Hibernate fonctionne mais voici ce qu'il est possible de faire.
Tout d'abord, on ne peut pas définir des valeurs définies comme privées en dehors de la classe. Donc même avec un héritage, c'est impossible. Tu peux essayer toutes les circonvolutions possibles, tu ne pourras pas.
Par contre, pour ce qui est des valeurs protégées, c'est tout à fait possible. Un bête héritage, __get(), et le tour est joué. Un truc du genre :
class Map {
public function query ( ) {
// quand on lance la requête, cette méthode est exécutée.
foreach($fields as $i => $field)
$field = ...;
// on peut récupérer les champs (attributs) des enfants (ici dans $fields) depuis la classe mère.
// on peut également attribuer une valeur, même si c'est protégé.
}
}
class Table extends Map {
public $id;
protected $name;
}
Il existe plusieurs moyens pour récupérer les attributs des enfants. C'est un peu galère, mais c'est possible. Tu as beaucoup de façon de faire.
Pour donner l'exemple de mon framework, Hoa_Database permet de faire ce genre de chose (la documentation est en cours). Mais on ne peut pas accéder aux attributs privés, car ils sont ... privés !
L'astuce pour les attributs protégés, c'est de les atteindre depuis la classe Mère (c'est l'inverse de ce qu'on fait d'habitude). C'est la seule façon de le faire.
Sinon Mojorisin, le modèle de conception visiteur n'a rien à voir avec ce genre de problème

.