zoukankan      html  css  js  c++  java
  • 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的方法

  • 相关阅读:
    Android开发环境配置
    Spring API后端原理及最佳实践
    Hibernate 编程
    MySQL 远程访问
    MySQL 5.7 8.0 重置密码
    H5 流媒体
    你不知道的项目
    Promise
    Why Vuex
    Vue 技术细节
  • 原文地址:https://www.cnblogs.com/spectrelb/p/6802722.html
Copyright © 2011-2022 走看看