课堂上的小组功能

时间:2015-04-18 11:08:15

标签: php class oop

我有一个类,其中我有与不同端点相关的类似函数

class MyClass {

    public function case1_changeOrder() {

    }

    public function case1_changeLimit() {

    }

    public function case2_changeOrder() {

    }

    public function case2_changeLimit() {

    }


}

是否有可能以某种方式对这些功能进行分组,以便我可以摆脱前缀并执行类似

的操作
$mc = new MyClass();
$mc->case1->changeOrder();
$mc->case2->changeOrder();

而不是

$mc = new MyClass();
$mc->case1_changeOrder();
$mc->case2_changeOrder();

1 个答案:

答案 0 :(得分:2)

你可以用Composition来实现这一点,但在我看来,它不会是一个好的设计,因为最好按照它的方式使用合成(A有一个B)而不仅仅是分组。

如果操作类似,那么使用抽象基类和类似的继承(如果需要,您将获得使用polimorphism的额外好处):

abstract class GenericCase
{   
    abstract public function changeLimit();
    abstract public function changeOrder();
}

然后是从基类继承的两个类:

class Case1 extends GenericCase
{
    public function changeLimit()
    {
        //... case 1 implementation
    }

    public function changeOrder()
    {
        //... case 2 implementation
    }
}

class Case2 extends GenericCase
{
    public function changeLimit()
    {
        //... case 2 implementation
    }

    public function changeOrder()
    {
        //... case 2 implementation 
    }
}

或者您可以使用通用界面实现相同目的。在这种情况下,这确实是一个优先事项。请参阅this tutorial for more details

如果您坚持使用合成来实现您要求的确切结构,请参阅合成 - 关联和聚合 here

部分 祝你好运。