当它明显是对象的属性时,试图获取非对象的属性

时间:2015-02-18 03:00:17

标签: php

美好的一天,快一点,为什么我在访问我的对象时遇到“试图获取非对象的属性”错误。

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刀片

1 个答案:

答案 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函数。