强制类实现一组方法之一

时间:2016-12-02 09:25:23

标签: php oop maintainability defensive-programming

假设我需要一组类来实现所有方法 X,Y和Z才能正常工作。在这种情况下,我可以让他们实现一个共同的界面来强迫它。

现在,我的情况有点不同 - 我的课程需要实现 X,Y和Z中的至少一个,而不一定是所有这些。接口在这里无法帮助我。我能想到的最接近的是一个共同的父母 - 它可以检查其建构中是否存在X,Y或Z.

我宁愿在这里避免继承,因为我可能需要在已经拥有父级的类中实现这个“接口”。那么 - 还有另一种优雅的方法吗?

(我在PHP工作,但如果存在一般的OOP解决方案,它可能会为更广泛的受众服务。)

1 个答案:

答案 0 :(得分:1)

  

我宁愿在这里避免继承,因为我可能需要实现这个" interface"在已经拥有父级的类中。那么 - 还有另一种优雅的方法吗?

如果我理解正确,您可以通过Traits解决该问题:

trait DefaultImpl
{
    public function x()
    {
        echo "Default implementation of x()\n";
    }

    public function y()
    {
        echo "Default implementation of y()\n";
    }

    public function z()
    {
        echo "Default implementation of z()\n";
    }
}

class XImpl
{
    use DefaultImpl;

    public function x()
    {
        echo "Custom implementation of X\n";
    }
}

$x = new XImpl();
$x->x();
$x->y();
$x->z();

从设计的角度来看,这不是一个很好的解决方案。但它比不必要的继承更好。