PHP 5.5.12 — Является ли foreach преобразовывать мои объекты в массивы?

Отредактировано для архива:

Читая в другом месте онлайн, у меня сложилось впечатление, что вы можете получить доступ к свойствам объекта и членам массива в foreach петля взаимозаменяемо. ЭТО ОДНАКО НЕПРАВИЛЬНО. Как уже упоминалось в комментариях к моему принятому ответу, foreach в любом случае не изменяет тип подсказки или приведение. Моя проблема возникла из-за функции, передающей массив массивов вместо массива объектов.

$AllMessages = func_getAllMessages($ThreadID);
foreach($AllMessages as $Message) {
echo $Message->Body; // Error
echo $Message['Body']; // Works
}

Объяснение:

func_getAllMessages()

Простая функция, которая возвращает совпадающие данные из базы данных. При ближайшем рассмотрении, это моя проблема. Я ожидал массив объектов, а не массив, который он фактически предоставлял. Если у вас есть похожие проблемы, проверьте это!

Короче: foreach не изменяет кастинг / подсказку по типу. Если вы не можете получить доступ к данным определенным образом, проверьте, что ПРЕДОСТАВЛЯЕТ данные foreach вместо.

-1

Решение

Вы можете преобразовать его в объект

foreach($AllMessages as $Message) {
$Message= (object) $Message;
echo $Message->Body;
}

См. Пример 2

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]