Есть ли способ проверить переменную для "isForEachable"
Используя 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", ваши усилия будут оценены, но я ищу что-то еще.
Ответы
Ответ 1
Ну, вроде. Вы можете сделать:
if (is_array($var) || ($var instanceof Traversable)) {
//...
}
Однако это не гарантирует, что цикл foreach
будет успешным. Это может вызвать исключение или сбой молча. Причина в том, что некоторые итерируемые объекты в какой-то момент могут не иметь какой-либо информации (например, они уже были итерации, и имеет смысл только повторить их один раз).
См. Traversable
. Массивы не являются объектами и, следовательно, не могут реализовать такой интерфейс (они предшествуют ему), но они могут быть пройдены в цикле foreach
.
Ответ 2
Поскольку все объекты и массивы " foreachable" в PHP 5 +...
function is_foreachable($var) {
return is_array($var) || is_object($var);
}
Ответ 3
Проверить с помощью is_array
if( is_array($things) )
echo "it is foreachable";
else
echo "Not it not foreachable.";