## 服务类[service]的封装
由于本项目的业务需求,我们需要封装大量的服务类来完成各种数据以及逻辑处理,我们在此以客户端订单管理操作为例。订单管理要实现以下操作:
订单报价(orderOffer)
订单支付(orderPay)
订单评价(orderComment)
按照传统的写法,我们会写成这样:
class orderAction
{
public function orderOffer()
{
//do something
}
public function orderPay()
{
//do something
}
public function orderComment()
{
//do something
}
}
这些写,是可以实现业务需求,但是扩展性和灵活性太差。在我们的项目中,我们采用`call_user_func`这个函数来实现。
class orderAction
{
public function render($actionName)
{
call_user_func([self::class, $actionName]);
}
private function orderOffer()
{
//do something
}
private function orderPay()
{
//do something
}
private function orderComment()
{
//do something
}
public function __call($name, $arguments)
{
//do something
}
}
`orderAction`类只对外暴露一个`render`方法,在外部使用的时候,我们在通过容器注入的方式来实现访问不同的订单管理方法:
Container::get(OrderAction::class)->render('orderOffer');//订单报价