Эта ошибка «Попытка получить свойство не-объекта» обычно возникает, когда вы ДУМАЕТЕ, что у вас есть объект, но у вас его нет, и в итоге вы пытаетесь неправильно обработать переменную, как будто это объект.Например:
$object1 = new Foo();
$object2 = new Foo();
$object3 = null;
$arrayOfObjects = array($object1, $object2, $object3);
foreach($arrayOfObjects as $object)
{
echo $object->Bar;
}
Когда вы отлаживаете, вы, вероятно, в конечном итоге видите данные для первых двух объектов в вашем цикле, но затем третий элемент массива является нулевым, а не объектом, поэтому вы 'Я получил эту ошибку.И поскольку вы видите данные из других элементов, вы ДУМАЕТЕ, что код работает.
И да, код работает, когда все данные верны, но если есть вероятность, что ваш массив не содержитобъект ... тогда вы столкнетесь с проблемами.
Например, предположим, что ваш массив $ row основан на данных, декодированных JSON:
$rows[] = json_decode("...row data...");
$rows[] = json_decode("...row data...");
$rows[] = json_decode("...row data...");
... и давайтескажем, что JSON-декодирование завершается неудачно по какой-либо причине (плохой JSON или что-то в этом роде), и вместо того, чтобы дать вам объект, он дает вам нулевое значение.Это приведет к тому, что вы получите echo $ row-> name;код потерпит неудачу, потому что $ row будет иметь значение null.
БЫСТРОЕ исправление состоит в том, чтобы просто проверить is_object () перед его использованием:
foreach($rows as $row) {
if(!is_object($row)) { continue; } // Skip non-object rows
... но вы действительно должны выяснить, чтопроблема с данными - убедиться, что вы не игнорируете проблему с большими данными.