正在将$this传递给一个静态方法紧密耦合


Is passing $this to a static method tight coupling?

下面是一个简单的例子:

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();

是否可以将$this作为参数传递给另一个类的方法?还是总是将是紧耦合?我可以提出另一个类似的例子,使用工厂模式代替静态方法调用。

这取决于Class_AClass_B的确切行为,但一般来说,定义一个由Class_A实现的接口和类型提示可能会更好。Class_B(例如getProperty())需要的Class_A的方法应该出现在你的界面中。然后,如果您想在以后用另一个类切换Class_A,它所要做的就是实现相同的接口。

同样,这取决于所讨论的类的行为,但是如果有另一个Class_C也使用了Class_B的静态方法,那么您可能需要考虑让Class_AClass_C扩展Class_B。更多信息可以在php对象继承页面找到