call_user_func的使用

官方文档:http://php.net/manual/zh/function.call-user-func.php

工作中遇到这样的业务,会有很大switch的判断,如下:

 1 class AlarmController
 2 {
 3     const FORM_MISSION = 1; //闹钟类型常量
 4     const FORM_POST = 2;
 5     const FORM_TIP = 3;
 6     
 7     /**
 8      * 闹钟新增
 9      * @param Request $request
10      * @return JsonResponse
11      */
12     public function alarmAddAction(Request $request)
13     {
14         switch ($form) {
15           case self::FORM_MISSION:
16               XXX //如果是这个类型,做的操作
17               break;
18           case self::FORM_POST:
19               XXX //如果是这个类型,做的操作
20               break;
21           case self::FORM_TIP:
22               XXX //如果是这个类型,做的操作
23               break;
24           default:
25               break;
26         }
27     }
28 }

如果以后在加很多case,那么会变得可读性很差,为了扩展于是我这样想的

 1 class AlarmController
 2 {
 3     const FORM_MISSION = 1; //闹钟类型常量
 4     const FORM_POST = 2;
 5     const FORM_TIP = 3;
 6     
 7     static $setAlarm = array(
 8         self::FORM_MISSION => 'checkMissionAlarm',
 9         self::FORM_POST => 'checkPostAlarm',
10         self::FORM_TIP => 'checkTipAlarm'
11     );
12     
13     /**
14      * 闹钟新增
15      * @param Request $request
16      * @return JsonResponse
17      */
18     public function alarmAddAction(Request $request)
19     {
20         if ( false === call_user_func(array($this, self::$setAlarm[$this->request['form']]))) return false;
21     }
22     
23     protected function checkMissionAlarm()
24     {
25   
26     }
27     protected function checkPostAlarm()
28     {
29   
30     }
31     protected function checkTipAlarm()
32     {
33   
34     }
35 }

这样就省略了switch case, 想要添加,只需要加对应static的方法

原文地址:https://www.cnblogs.com/spectrelb/p/6802722.html