Получение ошибки - Попытка получить свойство необъекта - PullRequest
0 голосов
/ 16 октября 2018

Код - (я получаю «Попытка получить свойство необъекта» в строке чуть выше )

//var_dump($tenants);
foreach($tenants as $rows){
            foreach($rows as $row) { //var_dump($row); die('..here now..');
            ?>
            <tr>
                <td data-field='name'><?php echo $row->name; ?></td>
                <td data-field='officecode'><?php echo $row->officecode; ?></td>
                <td>
                    <form method="post" action="/distributor/delete">

Я делаю var_dump из $ row прямо во втором цикле foreach, и получите эти значения ->

object(stdClass)#174 (9) { ["accountManager"]=> NULL ["hasChildren"]=> bool(false) ["name"]=> string(11) "Easy123.com" ["officecode"]=> string(7) "RFDUK-2123 ["active"]=> int(0) ["id"]=> int(4) ["countryStatus"]=> NULL ["parentId"]=> NULL ["groupCode"]=> NULL }

$ tenants выглядит следующим образом ->

object(stdClass)#210 (2) { ["tenants"]=> array(13) { [0]=> object(stdClass)#174 (9) { ["accountManager"]=> NULL ["hasChildren"]=> bool(false) ["name"]=> string(11) "Easy123.com" ["officecode"]=> string(7) "RFDUK-2123" ["active"]=> int(0) ["id"]=> int(4) ["countryStatus"]=> NULL 

Я в замешательстве, потому что если я могуполучить $ row значение с помощью var_dump, тогда почему бы не использовать $ row-> name внутри цикла foreach?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

$tenants - это объект со свойством tenants.Итак, давайте повторим это:

foreach($tenants->tenants as $row) {
?>
    <tr>
        <td data-field='name'><?php echo $row->name; ?></td>
         ...
0 голосов
/ 16 октября 2018

Эта ошибка «Попытка получить свойство не-объекта» обычно возникает, когда вы ДУМАЕТЕ, что у вас есть объект, но у вас его нет, и в итоге вы пытаетесь неправильно обработать переменную, как будто это объект.Например:

$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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...