美好的一天,只是一个快速的,为什么我在访问我的对象时收到“尝试获取非对象的属性”错误。
echo print_r($bill['交易'])
结果如下:
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
然后当我最终使用 -> 访问其属性时
@foreach($bill['transactions'] as $t)
<td><?php echo $t->vendor; ?></td>
@endforeach
然后我收到错误。顺便说一句,我使用 Laravel Blade
最佳答案
正如 @Taalaibek 所说,您的代码的问题是您正在尝试访问非对象的属性。您的数组 $bill['transactions']
有两个元素 - 一个对象和一个数字,44。与其他一些语言不同,例如 JavaScript(以及在较小程度上,具有装箱/拆箱功能的 Java),其中原始值是隐式对象,只有对象是 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
功能。
关于php - 当非对象的属性明显是对象的属性时尝试获取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575214/