Есть ли способ проверить переменную на «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», ваши усилия приветствуются, но я ищу что-то другое.

11
задан BoltClock 30 August 2010 в 04:08
поделиться

2 ответа

Ну вроде того. Вы можете сделать:

if (is_array($var) || ($var instanceof Traversable)) {
    //...
}

Однако это не гарантирует, что цикл foreach будет успешным. Он может генерировать исключение или тихо завершаться ошибкой. Причина в том, что некоторые итерируемые объекты в какой-то момент могут не иметь никакой информации для получения (например, они уже были итерированы, и имеет смысл повторять их только один раз).

См. Перемещаемый . Массивы не являются объектами и, следовательно, не могут реализовать такой интерфейс (они предшествуют ему), но их можно обходить в цикле foreach.

15
ответ дан 3 December 2019 в 08:02
поделиться

Проверьте с помощью is_array

if( is_array($things) )
      echo "it is foreachable";
else
      echo "Not it's not foreachable.";
-2
ответ дан 3 December 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: