Используя PHP, Есть ли функция / метод / способ, чтобы проверить, содержит ли переменная что-то, что было бы безопасно поместить в конструкцию foreach? Что-то вроде
//the simple case, would probably never use it this bluntly
function foo($things)
{
if(isForEachable($things))
{
foreach($things as $thing)
{
$thing->doSomething();
}
}
else
{
throw new Exception("Can't foreach over variable");
}
}
Если ваш ответ «настроить обработчик для обнаружения ошибки PHP», ваши усилия приветствуются, но я ищу что-то другое.
Ну вроде того. Вы можете сделать:
if (is_array($var) || ($var instanceof Traversable)) {
//...
}
Однако это не гарантирует, что цикл foreach
будет успешным. Он может генерировать исключение или тихо завершаться ошибкой. Причина в том, что некоторые итерируемые объекты в какой-то момент могут не иметь никакой информации для получения (например, они уже были итерированы, и имеет смысл повторять их только один раз).
См. Перемещаемый
. Массивы не являются объектами и, следовательно, не могут реализовать такой интерфейс (они предшествуют ему), но их можно обходить в цикле foreach
.
Проверьте с помощью is_array
if( is_array($things) )
echo "it is foreachable";
else
echo "Not it's not foreachable.";