2009-08-27 4 views
0

Exemple:Comment empêcher le passage vers le bas du paramètre d'une fonction à une autre

Class A { 
    public function __construct() { 
     $this->b_Instance = new B(); 
    } 
    public caller() { 
     $this->b_Instance->call_me($param1,$param2,$param3); 
    } 
} 

Class B { 
    public function __construct() { 
     //lots of variables here 
    } 

    public function call_me($param1,$param2,$param3) { 
     ... 
     //do something with param1, but nothing with param2 and 3. just pass it. 
     $this->do_something($param2,$param3); 
    } 

    private function do_something($param2,$param3) { 
     ... 
     //do something with param2 and 3 
    } 

    //lots of other functions here 
} 

Normalement j'ajouter au constructeur de B comme une variable de classe, mais le constructeur est déjà peuplé avec beaucoup de variables , et les paramètres passés par A-> caller() sont seulement utilisés par B-> call_me et B-> do_something de toute façon. Quelle est la manière élégante d'empêcher ce dépassement de paramètres de B-> call_me à B-> do_something? Ou est-ce même un problème et j'ai juste un trouble obsessionnel-compulsif?

Supplémentaire: Notez que B-> call_me ne fait rien avec param2 et 3, mais seulement le passe à B-> do_something qui est une fonction privée.

Répondre

0

Si ces variables sont des paramètres liés uniquement à call_me et do_something, ils doivent être passés comme paramètres ^^

Ce que je veux dire est:

  • ils ne doivent pas être stockés sous forme de classe- variables
  • ils ne seront pas globalement/session/anyhing comme ça.


Une solution pourrait être de regrouper ces paramètres dans un tableau associatif, et passez un seul tableau en tant que paramètre (ce qui signifie ne pas avoir à changer les méthodes defininitions chaque fois que vous souhaitez ajouter un paramètre). .. Mais je n'aime pas cette idée: votre phpdoc ne sera pas aussi bon qu'avant, vous n'avez dans votre IDE faisant allusion ...


Peut-être une question serait: vos méthodes ne fais pas "trop ​​de choses" ?

Par exemple, une méthode devrait faire une petite tâche; peut-être que vous faites beaucoup de tâches? Dans ce cas, peut-être les diviser en plusieurs petites méthodes pourrait aider?

+0

Ils sont divisés, chaque méthode ne faisant qu'une chose. U mis à jour ma question en passant, pour le rendre plus clair – putolaruan

+0

Je voulais dire "je" mis à jour ma question. – putolaruan

+0

J'ai décidé que la méthode faisait beaucoup de choses. Refacturé. – putolaruan

0

Autre solution serait d'utiliser un objet pour encapsuler les params (peut-être qu'ils sont liés et bénéficieraient de la combinaison puis dans un objet), de sorte que vous auriez:

$this->call_me(new SomeObject($param1,$param2,$param3)); 

Mais pour être honnête, si passer ces params est un problème dans votre cas je rewink le design, si votre classe a beaucoup de paramètres dans le constructeur qui dans la plupart des cas signifie qu'il a une grande responsabilité et devrait être refactorisé dans des classes plus petites.

+0

Salut, ce n'est pas vraiment un problème pour moi (ne pas placer les paramètres de call_me sur le constructeur) puisque je ne prévois pas de le placer de toute façon puisqu'il est seulement utilisé par deux fonctions. – putolaruan

Questions connexes