官方文档: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的方法