我有一个类,其中我有与不同端点相关的类似函数
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();
答案 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
部分 祝你好运。