Como evitar a passagem abaixo do parâmetro de uma função para outra

votos
0

Exemplo:

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
}

Normalmente eu adicioná-lo para o construtor de B como uma variável de classe, no entanto o construtor já está preenchida com muitas variáveis ​​e os parâmetros passados ​​por A-> chamador () é usado apenas por B-> call_me e B-> do_something de qualquer maneira.

Qual é a maneira elegante de prevenir este extra-passagem de parâmetros de B-> call_me para B-> do_something? Ou isso é mesmo um problema e eu só tenho TOC?

Adicionais: Observe que B-> call_me não faz nada com param2 e 3, mas só passa para B-> do_something que é uma função privada.

Publicado 27/08/2009 em 07:48
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Outra solução seria usar um objeto para encapsular esses parâmetros (talvez eles estão relacionados e se beneficiariam da combinação, em seguida, em um objeto), então você teria:

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

Mas para ser honesto, se passando esses parâmetros é um problema no seu caso eu iria rehink o projeto, se sua classe tem a muitas params no construtor que na maioria dos casos significa que ele tem a grande responsabilidade e deve ser reformulado em clases menores.

Respondeu 27/08/2009 em 08:04
fonte usuário

votos
0

Se essas variáveis são parâmetros relacionados apenas para call_mee do_something, eles devem ser passados como parâmetros ^^

O que eu quero dizer é :

  • eles não têm de ser armazenados como classe-variáveis
  • eles obvisouly não será global / sessão / anyhing assim.


Uma solução poderia ser a de reagrupar esses parâmetros em uma matriz associativa, e passar apenas um array como parâmetro (que significa não ter de alterar os métodos defininitions cada vez que você quiser adicionar um parâmetro) ... Mas eu não gosto dessa ideia : seu phpdoc não será tão bom quanto antes, você não vai ter insinuando em sua IDE, ...


Talvez uma pergunta seria: são os seus métodos não fazer "muitas coisas"?

ou seja, um método deve fazer uma tarefa pequena; talvez você está fazendo muitas tarefas? Neste caso, talvez dividindo-os em vários métodos menores poderiam ajudar?

Respondeu 27/08/2009 em 07:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more