Что ж, поскольку вы использовали слово «симпатичный» в своем посте, просто небольшое предложение по косметическим изменениям для удобства чтения:
function is_array_or_alike($var) {
return is_array($var) ||
($var instanceof ArrayAccess &&
$var instanceof Traversable &&
$var instanceof Serializable &&
$var instanceof Countable);
}
Объяснение изменений:
Изменение имени функции: "is_array_alike
" -> "is_array_or_alike
" просто для того, чтобы было ясно, что проверяются как массивность, так и сходство.
Изменение имени параметра/аргумента: $array
-> $var
, потому что "$array
" уже как бы предполагает, что аргумент имеет тип массива.
Условия стекирования && для удобочитаемости и соответствия стандарту кодирования Drupal: макс. 80-символьная строка. Поскольку вы являетесь одним из основных сопровождающих Drupal, я предполагаю, что эта функция может войти в Drupal, так что, вероятно, вы все равно сделали бы это перед фиксацией.
Вы правы, что is_object()
не нужен. В Java это было бы необходимо, потому что instanceof
выдавало бы ошибку времени компиляции, если бы первый операнд не был объектом, но я только что проверил в PHP, и ошибки нет, просто результат bool(false).
Я поддерживаю предложение paulmatthews86 о том, чтобы вы предоставили вариант использования. Трудно дать рекомендации, если мы не знаем критериев. Например, чтобы немного позаимствовать с точки зрения парадигмы утиного набора, тесты instanceof
были бы полезны, но не обязательно обязательными или даже полными. Если вас больше интересует, что может делать $var
и как он ведет себя в определенных контекстах, вы можете использовать отражение, чтобы проверить наличие методов, которые необходимо вызвать для него позже, или вы можете проверить, ведет ли он себя так, как ожидалось, когда передается функциям массива. например «Работает» ли он с array_udiff_assoc
, array_chunk
и т. д. Если эти варианты поведения более важны для ваших вариантов использования, то эти тесты могут заменить тестирование типов instanceof
, хотя, конечно, будет много дублирования.
Надеюсь это поможет. Интересно посмотреть, что вы, наконец, решите, если решите опубликовать это.
person
David
schedule
11.09.2012
Is there something more pretty?
сомневаюсь. - person Nemoden   schedule 10.09.2012$array['test']
) или вы можете перебирать ее как массив? - person JamesArmes   schedule 10.09.2012