解决方案 »

  1. cvm

  2. 就是这样的逻辑 还有什么方式 简洁直达目的. 不查数据库 这个 case 可能会增加更多 不好维护
    $test = 1;
    switch ($test) {
     
        case 1:
        case 2:
        case 3:
        case 4:
            //run one
            break;
        case 5:
            break;
        case 6:
        default:
            break;
    }
      

  3. 个人感觉,如果对于$test的每一个值,都会执行一个唯一的函数(如1,2执行了函数run1, 则1, 2不再执run2),用switch ..case应该算是比较简洁的了。而如果每个test值,都可能执行多个函数(如2同时执行run1, run2),那么更好的设计方案是:
    array(
        1 => array('run1', 'run2'),
        2  => array('run2', 'run3'),
      ...
    )
    这有点类似事件绑定,同一个节点上绑定了多个事件(这里是执行函数)
    然后getFunction List ............bla bla.
    这样,最主要的维护工作在上述那个对应数组,相当于手动维护一个数据库
      

  4. 感觉用key => value比较好。function run($test){
         return ($test>=1 && $test<4)? 'one' : '';
    }
      


  5. one:下面可能还有些代码 简短的应该不错 如果代码还是有一些的话这样写看起来有点强迫症 哈哈哈 不过 这是 我上面列出的新方法 谢谢  楼下还有吗? 有个朋友也有给出一个 调用后静态类的方法  跟你这个大同小异了
      

  6. if,switch适合固定较少的分支, hashtable适合动态的或者较多的分支.
    要是你足够蛋疼,用文件include也是可以的。
      

  7. 更多的写法我不肯定没有,因为php是动态脚本语言,可以做很多蛋疼的事。
    但是只有结合实际用途,才能找到最适合的用法。
      


  8. <?phpfunction run($t, $s){
    $data = array(
    1 => function($param) {
    return serialize($param);
    },
    2 => function($param) {
    return json_encode($param);
    },
    );
    if(!isset($data[$t])){
    return false;
    }else{
    return $data[$t]($s);
    }
    }echo run(2, array('data' => '一个数组'));
      

  9. 我认为通过类的 __call 方法实现是最稳妥的
      


  10. 那再__call里又要怎么实现?