Hooks et objets avec des propriétés privées
Posté : 19 nov. 2010, 15:53
Hello 
Je base une grosse partie du projet sur lequel je suis actuellement en train de travailler sur la présence de hooks à des points clefs. Et je me suis heurté a un petit problème de logique ...
Admettons une classe basique :
Pour ce cas de figure vous me direz que je peux créer des setter et des getters pour y accéder, sauf que pour une classe avec 30 propriétés, ça devient vite un peu chiant ... Et de plus ça ne résoudrait pas le soucis pour les méthodes protégées, là j'ai simplement mentionné les propriétés, mais il peut arriver que j'ai besoin d'utiliser des méthodes protégées.
En gros j'aimerai pouvoir transporter le "contexte" du $this dans mon Hook. La seule solution que je vois actuellement c'est de ... tout passer en public :s Au moins ça marchera, mais je trouve dommage de ne pas pouvoir bénéficier de ces fonctionnalités de PHP, surtout qu'il s'agit d'un Framework sur lequel je bosse et ça ferait moyennement sérieux ...
Vous auriez des idées ? J'ai peut être pris le problème dans le mauvais sens ?
Je base une grosse partie du projet sur lequel je suis actuellement en train de travailler sur la présence de hooks à des points clefs. Et je me suis heurté a un petit problème de logique ...
Admettons une classe basique :
class MVC
{
protected $rules = array();
public function process()
{
// Ici je place un hook, que des plugins pourront utiliser
trigger_hook('mvc:process', $this);
// Ici du code, que la méthode process() fera
foreach ($this->rules) { ... }
}
}
Maintenant dans un plugin, je vais faire en sorte d'utiliser ce hook (vive PHP 5.3 et les fonctions anonymes :p)
// Mon plugin qui veut ajouter un truc dans le MVC
register_hook('mvc:process', function(MVC $mvc)
{
$mvc->rules[] = 'une nouvelle règle';
}
Sauf que le soucis ... C'est que MVC->rules est protégée, donc impossible d'y accéder dans mon plugin Pour ce cas de figure vous me direz que je peux créer des setter et des getters pour y accéder, sauf que pour une classe avec 30 propriétés, ça devient vite un peu chiant ... Et de plus ça ne résoudrait pas le soucis pour les méthodes protégées, là j'ai simplement mentionné les propriétés, mais il peut arriver que j'ai besoin d'utiliser des méthodes protégées.
En gros j'aimerai pouvoir transporter le "contexte" du $this dans mon Hook. La seule solution que je vois actuellement c'est de ... tout passer en public :s Au moins ça marchera, mais je trouve dommage de ne pas pouvoir bénéficier de ces fonctionnalités de PHP, surtout qu'il s'agit d'un Framework sur lequel je bosse et ça ferait moyennement sérieux ...
Vous auriez des idées ? J'ai peut être pris le problème dans le mauvais sens ?