【问题标题】:Is passing $this to a static method tight coupling?是否将 $this 传递给静态方法紧密耦合?
【发布时间】:2011-12-18 21:27:59
【问题描述】:

这是一个简单的例子:

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 作为参数传递给另一个类的方法?还是总是会是紧耦合?我可以使用工厂模式代替静态方法调用来提出另一个类似的示例。

【问题讨论】:

    标签: php loose-coupling


    【解决方案1】:

    这取决于Class_A 和Class_B 的确切行为,但通常最好定义一个由Class_A 实现的接口并为此键入提示。 Class_B(例如getProperty())需要的Class_A的方法应该出现在你的界面中。然后,如果您想在以后将Class_A 切换到另一个类,它所要做的就是实现相同的接口。

    【讨论】:

    • 谢谢,这很有意义。现在我正在尝试考虑使其紧密耦合的确切行为
    • 请参阅this question 了解更多信息。总而言之:事实上,在您的示例中 Class_B 依赖于 Class_A,而使用接口会删除该依赖关系。您可以使用实现该接口的模拟对象独立测试Class_B。
    【解决方案2】:

    再一次,这取决于相关类的行为,但如果有另一个 Class_C 例如也使用了 Class_B 的静态方法,您可能需要考虑使用 Class_A 和 Class_C扩展Class_B。更多信息可以在phpobject inheritance page上找到。

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 2017-12-28
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多