代码之家  ›  专栏  ›  技术社区  ›  manishk

获取错误-尝试获取非对象的属性

  •  0
  • manishk  · 技术社区  · 7 年前

    (我在上面的一行中得到“Trying to get property of non object”<表格(>)

    //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">
    

    $行 在第二个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 }
    

    $租户如下->

    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 
    

    $行 $行->名称 在foreach循环中?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Felippe Duarte    7 年前

    $tenants tenants . 所以,让我们迭代一下:

    foreach($tenants->tenants as $row) {
    ?>
        <tr>
            <td data-field='name'><?php echo $row->name; ?></td>
             ...
    
        2
  •  0
  •   jhilgeman    7 年前

    “尝试获取非对象的属性”这个错误通常发生在您认为您有一个对象,但是您没有,并且您最终尝试错误地将变量视为一个对象。例如:

    $object1 = new Foo();
    $object2 = new Foo();
    $object3 = null;
    $arrayOfObjects = array($object1, $object2, $object3);
    
    foreach($arrayOfObjects as $object)
    {
      echo $object->Bar;
    }
    

    是的,当所有的数据都正确时,代码就可以工作了,但是如果数组不包含对象的话。。。然后你就会遇到问题。

    $rows[] = json_decode("...row data...");
    $rows[] = json_decode("...row data...");
    $rows[] = json_decode("...row data...");
    

    …假设JSON解码由于任何原因(坏的JSON或其他原因)而失败,它没有给你一个对象,而是给你一个空值。这将导致echo$行->姓名;代码失败,因为$row将为空。

    快速解决方法是在使用前检查is\u object():

    foreach($rows as $row) {
    if(!is_object($row)) { continue; } // Skip non-object rows
    

    推荐文章