Başka bir işlevi parametrenin aşağı geçen önlemek için nasıl

2 Cevap php

Örnek:

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
}

Normalde bir sınıf değişkeni olarak B kurucusuna eklemek istiyorum, ancak yapıcı zaten değişkenlerin sürü ile doldurulur, ve A-> arayan tarafından geçirilen parametreleri () sadece B-> call_me ve B-> tarafından kullanılan Zaten do_something.

B-> do_something B-> call_me Parametrelerin bu ekstra geçişini önlemenin zarif yolu nedir? Ya da bu bile bir sorun olduğunu ve sadece OKB?

Ek: O B-> call_me Param2 ve 3 ile hiçbir şey yapmaz, ama sadece özel bir işlevi B-> do_something geçirir edin.

2 Cevap

Bu değişkenler sadece call_me ve do_something, onlar ^ ^ parametre olarak kabul edilmelidir ilişkin parametreler ise

Ne demek:

  • Onlar sınıf değişkenler olarak saklanmasına gerek yok
  • onlar obvisouly böyle küresel / session / Anyhing olmayacaktır.


A solution might be to regroup those parameters in an associative array, and pass only one array as parameter (which means not having to change the methods defininitions each time you want to add a parameter)... But I don't like this idea : your phpdoc will not be as good as before, you will not have hinting in your IDE, ...


Maybe one question would be : are your methods not doing "too many things" ?

yani, bir yöntem, bir küçük bir görev yapmalıdır; belki senin görevleri çok yapıyorsun? Bu durumda, belki birkaç küçük yöntemlerle ayırmayı yardımcı olabilir?

Diğer çözüm bu params (belki de ilgili ve bir nesnenin sonra içine birleştirerek yararlanacak) saklanması için bir nesneyi kullanmak olacaktır, bu yüzden olurdu:

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

Sınıf yapıcısı birçok params için varsa Ama dürüst olmak gerekirse, bu params geçerken sizin durumunuzda bir sorun olup olmadığını ben pek çok durumda bu büyük sorumluluğu vardır ve küçük clases olarak refactored gerektiği anlamına gelir, tasarım rehink olacaktır.