douzhi9939 2015-05-29 17:23
浏览 11
已采纳

更清洁的方式写这个检查?

I have the following two arrays (var_dumped):

array (size=3)
  'param' => 
    array (size=1)
      0 => string 'Example' (length=7)
  'page-template' => string 'general' (length=7)
  'action' => 
    object(Closure)[2125]

array (size=3)
  'param' => 
    array (size=1)
      0 => string 'Example' (length=7)
  'page-template' => string 'general' (length=7)
  'action' => 
    object(Closure)[2126]

Now they are the same, they even call the same function (in 'action') but I cannot do === on them because of the closure, so I wrote this check:

foreach(self::$registeredRoutes[$routeName] as $routeActions) {
    if (!is_callable($action) && !is_callable($routeActions)) {
        if (isset($routeActions['param']) && isset($action['param'])
            && $routeActions['param'] === $action['param'] &&
            isset($routeActions['page-template']) &&
            isset($action['page-template']) &&
            $routeActions['page-template'] === $action['page-template']
            ) {

            var_dump('hello');
        }
    }
}

Accept it makes me want to vomit because of the if statement. Is there a cleaner, testable way of writing this where I still get the same result?

  • 写回答

1条回答 默认 最新

  • dongwu9063 2015-05-29 17:37
    关注

    Now they are the same, they even call the same function

    Apparently not.

    $func = function() {
        // ...
    };
    
    $arr1 = array(
        'param' => array('Example'),
        'page-template' => 'general',
        'action' => $func);
    
    $arr2 = array(
        'param' => array('Example'),
        'page-template' => 'general',
        'action' => $func);
    
    var_dump($arr1 === $arr2); // true
    

    You can also simply don't use anonymous functions.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂