2011-12-18 55 views
1

下面是一个简单的例子:

class Class_A { 
    protected $_property; 

    public function method() 
    { 
     Class_B::method($this); 
    } 

    public function getProperty() 
    { 
     return $this->_property; 
    } 
} 

class Class_B { 
    public static function method(Class_A $classA) 
    { 
     $classA->getProperty(); 
    } 
} 

$classA = new ClassA(); 
$classA->method(); 

是以往任何时候都好传递$此作为参数传递给另一个类的方法?或者是总是会紧耦合吗?我可以使用工厂模式代替静态方法调用提出另一个类似的例子。

回答

1

它取决于Class_AClass_B的确切行为,但总的来说,最好定义一个由Class_A实现的接口并为此提供类型提示。 Class_B(例如getProperty())需要的Class_A的方法应该出现在您的界面中。然后,如果您想在稍后的日期将Class_A与另一个类进行切换,则只需实现相同的界面即可。

+0

非常感谢。现在我正试图想一想使它紧密结合的确切行为 – Dan 2011-12-18 22:12:20

+0

请参阅[这个问题](http://stackoverflow.com/questions/2832017/what-is-the-difference-between-loose-coupling-和物体紧密耦合),以获取更多信息。总之:在你的例子中''Class_B''依赖'Class_A',而使用一个接口删除这个依赖。您可以通过使用实现了该接口的模拟对象来独立测试'Class_B'。 – cmbuckley 2011-12-18 22:36:03

0

再次,这取决于所涉及的类的行为,但如果有另一个Class_C比如也使用Class_B的,你可能要考虑为Class_AClass_C延长Class_B静态方法。更多信息可以在php object inheritance page上找到。