代码-(我在< form >上方的行上看到“尝试获取非对象的属性”)
//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,并获得了这些值->
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
我很困惑,因为如果我能够通过var_dump获得行名的值,那么当我在foreach循环中使用$->var_dump时,为什么不能呢?
发布于 2018-10-17 03:32:40
$tenants
是一个具有tenants
属性的对象。因此,让我们迭代它:
foreach($tenants->tenants as $row) {
?>
<tr>
<td data-field='name'><?php echo $row->name; ?></td>
...
发布于 2018-10-17 03:29:07
这个错误,“试图获取非对象的属性”,通常发生在你认为你有一个对象,但是你没有,你最终试图错误地把一个变量当作一个对象来处理。例如:
$object1 = new Foo();
$object2 = new Foo();
$object3 = null;
$arrayOfObjects = array($object1, $object2, $object3);
foreach($arrayOfObjects as $object)
{
echo $object->Bar;
}
当你调试的时候,你可能会看到循环中前两个对象的数据,但是第三个数组元素是空的,而不是一个对象,所以你会得到这个错误。由于您看到的是来自其他元素的数据,因此您认为代码正在工作。
是的,当所有数据都正确时,代码才能正常工作,但是如果您的数组中没有包含对象的可能性...然后你就会遇到问题。
例如,假设您的$rows数组来自JSON解码的数据:
$rows[] = json_decode("...row data...");
$rows[] = json_decode("...row data...");
$rows[] = json_decode("...row data...");
假设...and解码由于某种原因(错误的JSON或其他原因)而失败,它不是给你一个对象,而是给你一个null。这将导致您的回显$row->name;代码失败,因为$row将为空。
快速解决方法是在使用is_object()之前只检查它:
foreach($rows as $row) {
if(!is_object($row)) { continue; } // Skip non-object rows
...but您应该真正弄清楚数据问题是什么,以确保您不会忽略更大的数据问题。
https://stackoverflow.com/questions/52842543
复制相似问题