2015-05-29 2 views
0

У меня есть следующие два массива (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

Возникает вопрос, который вы могли бы опубликовать на http://codereview.stackexchange.com/ :) – AlvaroSantisteban

+0

@AlvaroSantisteban. – TheWebs

ответ

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 

Вы также можете просто не использовать анонимные функции.

+1

его не '$ func == function() {}' его просто 'функция() {}', которая прошла. Вот почему действие отличается. – TheWebs

Смежные вопросы