如何防止参数从一个函数传递到另一个函数

时间:2009-08-27 06:48:06

标签: php functional-programming function

示例:

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
}

通常我会将它作为类变量添加到B的构造函数中,但是构造函数已经填充了大量变量,并且由A-> caller()传递的参数仅由B->使用。无论如何,call_me和B-> do_something。

阻止将参数从B-> call_me传递到B-> do_something的优雅方法是什么?或者这是一个问题,我只是有强迫症?

附加:请注意,B-> call_me对param2和3不执行任何操作,但仅将其传递给B-> do_something,这是一个私有函数。

2 个答案:

答案 0 :(得分:0)

如果这些变量只是与call_medo_something相关的参数,则应将它们作为参数传递^^

我的意思是:

  • 它们不必存储为类变量
  • 他们显然不会像那样全球/会话/任何人。


解决方案可能是在关联数组中重新组合这些参数,并且只传递一个数组作为参数(这意味着每次要添加参数时都不必更改方法定义) ...但是我不喜欢这个想法:你的phpdoc不会像以前一样好,你不会在你的IDE中暗示......,


也许有一个问题是:你的方法不做“太多事情”吗?

即一种方法应该完成一项小任务;也许你做了很多任务?在这种情况下,可能将它们分成几个较小的方法可能有帮助吗?

答案 1 :(得分:0)

其他解决方案是使用一个对象来封装那些参数(可能它们是相关的,并且会从然后组合到一个对象中受益),所以你会有:

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

但说实话,如果传递这些参数是你的问题,我会重新考虑设计,如果你的类在构造函数中有许多参数,在大多数情况下意味着它必须承担很大的责任并且应该在较小的情况下重构clases。