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的方法

  • 相关阅读:
    Java中数据类型的分类
    PL/SQL Developer工具
    Oracle数据库SQL语句的分类
    Oracle数据库控制台常用命令
    关于C#中泛型类型参数约束(where T : class)
    C#动态操作DataTable(新增行、列、查询行、列等)
    ADO.NET 全面整理
    区块链入门教程
    排序算法汇总
    常用SQL
  • 原文地址:https://www.cnblogs.com/spectrelb/p/6802722.html
Copyright © 2011-2022 走看看