Ну, вроде как. Вы можете сделать:
if (is_array($var) || ($var instanceof Traversable)) {
//...
}
Однако это не гарантирует, что цикл foreach
будет успешным. Это может выдать исключение или молча провалиться Причина в том, что некоторые итерируемые объекты в какой-то момент могут не иметь никакой информации для получения (например, они уже были итерированы, и имеет смысл только итерировать их один раз).
См. Traversable
. Массивы не являются объектами и, следовательно, не могут реализовать такой интерфейс (они предшествуют ему), но их можно обойти в цикле foreach
.