更清洁的方式来编写此支票?

时间:2015-05-29 17:23:26

标签: php

我有以下两个数组(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]

现在它们是相同的,它们甚至调用相同的函数(在'action'中),但由于关闭,我不能对它们===进行调用,所以我写了这个检查:

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');
        }
    }
}

接受它让我想因为if语句而呕吐。在我仍然得到相同结果的地方,是否有一种更清晰,可测试的方法?

1 个答案:

答案 0 :(得分:0)

  

现在它们是相同的,它们甚至调用相同的功能

显然不是。

$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

您也可以不使用匿名函数。