首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取错误-正在尝试获取非对象的属性

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

Stack Overflow用户
提问于 2018-10-17 03:15:04
回答 2查看 3.4K关注 0票数 0

代码-(我在< form >上方的行上看到“尝试获取非对象的属性”)

代码语言:javascript
复制
//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循环中对$row执行了一次var_dump,并获得了这些值->

代码语言:javascript
复制
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如下所示->

代码语言:javascript
复制
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 

我很困惑,因为如果我能够通过var_dump获得行名的值,那么当我在foreach循环中使用$->var_dump时,为什么不能呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-17 03:32:40

$tenants是一个具有tenants属性的对象。因此,让我们迭代它:

代码语言:javascript
复制
foreach($tenants->tenants as $row) {
?>
    <tr>
        <td data-field='name'><?php echo $row->name; ?></td>
         ...
票数 1
EN

Stack Overflow用户

发布于 2018-10-17 03:29:07

这个错误,“试图获取非对象的属性”,通常发生在你认为你有一个对象,但是你没有,你最终试图错误地把一个变量当作一个对象来处理。例如:

代码语言:javascript
复制
$object1 = new Foo();
$object2 = new Foo();
$object3 = null;
$arrayOfObjects = array($object1, $object2, $object3);

foreach($arrayOfObjects as $object)
{
  echo $object->Bar;
}

当你调试的时候,你可能会看到循环中前两个对象的数据,但是第三个数组元素是空的,而不是一个对象,所以你会得到这个错误。由于您看到的是来自其他元素的数据,因此您认为代码正在工作。

是的,当所有数据都正确时,代码才能正常工作,但是如果您的数组中没有包含对象的可能性...然后你就会遇到问题。

例如,假设您的$rows数组来自JSON解码的数据:

代码语言:javascript
复制
$rows[] = json_decode("...row data...");
$rows[] = json_decode("...row data...");
$rows[] = json_decode("...row data...");

假设...and解码由于某种原因(错误的JSON或其他原因)而失败,它不是给你一个对象,而是给你一个null。这将导致您的回显$row->name;代码失败,因为$row将为空。

快速解决方法是在使用is_object()之前只检查它:

代码语言:javascript
复制
foreach($rows as $row) {
if(!is_object($row)) { continue; } // Skip non-object rows

...but您应该真正弄清楚数据问题是什么,以确保您不会忽略更大的数据问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52842543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档