Недействительный аргумент предоставляется для foreach ()

Это часто, оказывается, со мной обрабатывает данные, которые могут быть или массивом или пустой переменной и подавать некоторых foreach с этими данными.

$values = get_values();

foreach ($values as $value){
  ...
}

При питании foreach с данными, которые не являются массивом, Вы получаете предупреждение:

Предупреждение: Недействительный аргумент предоставляется для foreach () в [...]

Принятие не возможно осуществить рефакторинг get_values() функционируйте, чтобы всегда возвратить массив (обратная совместимость, не доступный исходный код, безотносительно другой причины), я задаюсь вопросом, который является самым чистым и самым эффективным способом избежать этих предупреждений:

  • Кастинг $values выстраивать
  • Инициализация $values выстраивать
  • Обертывание foreach с if
  • Другой (предложите),
280
задан Geoffrey Hale 21 September 2016 в 06:52
поделиться

2 ответа

Лично я считаю, что это самый чистый - не уверен, что он самый эффективный, помните!

if (is_array($values) || is_object($values))
{
    foreach ($values as $value)
    {
        ...
    }
}

Причина моего предпочтения в том, что он не выделяет пустой массив, если вам все равно не с чего начать.

479
ответ дан 23 November 2019 в 02:00
поделиться

Прежде всего, каждая переменная должна быть инициализирована. Всегда.
Трансляция невозможна.
если get_values ​​(); может возвращать переменную другого типа, это значение, конечно, необходимо проверить.

3
ответ дан 23 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

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