美好的一天,快一点,为什么我在访问我的对象时遇到“试图获取非对象的属性”错误。
echo print_r($ bill ['transactions'])
结果如下:
Array
(
[transactions] => Array
(
[0] => stdClass Object
(
[vendor] => 1
[total] => 8934
[payment_terms] => 60
[date_at] => 2015-02-09 00:00:00
[date_due] => 2015-03-11 00:00:00
)
[past_due] => 44
)
[totalAccount] => 8934
[vendor] => Sample Supplier Co.
)
1
当我尝试使用此代码循环它时
@foreach($bill['transactions'] as $t)
<td><?php print_r($t); ?></td>
@endforeach
结果如下:
stdClass Object
(
[vendor] => 1
[total] => 8934
[payment_terms] => 60
[date_at] => 2015-02-09 00:00:00
[date_due] => 2015-03-11 00:00:00
)
1
然后当我最终使用 - &gt;访问其财产
@foreach($bill['transactions'] as $t)
<td><?php echo $t->vendor; ?></td>
@endforeach
然后我得到了错误。顺便说一句,我使用laravel刀片
答案 0 :(得分:2)
正如@Taalaibek所说,代码的问题在于您正在尝试访问非对象的属性。你的数组$bill['transactions']
有两个元素 - 一个对象和一个数字,44。与其他语言不同,例如JavaScript(在较小程度上,带有装箱/拆箱的Java),其中原始值是隐式对象,只有< em> objects 是PHP中的对象。尝试在PHP中使用->
访问非对象的值将引发错误。重申一下,在JS中,你可以做到
var x = 5;
alert(x.toString());
但在PHP中,以下代码会给您一个错误:
$x = 5;
echo $x->hello;
请注意,在Java中,所有对象都从基类继承,但在PHP中则不然。您在PHP中创建的对象不会从stdClass
继承,而原始值(例如44)肯定不会继承。
您可以按如下方式修改代码:
@foreach($bill['transactions'] as $t)
<td><?php if(is_object($t)) echo $t->vendor; ?></td>
@endforeach
使用is_object
函数。