php - 当非对象的属性明显是对象的属性时尝试获取它

标签 php

美好的一天,只是一个快速的,为什么我在访问我的对象时收到“尝试获取非对象的属性”错误。

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/

相关文章:

php - Laravel Eloquent 关系 - 表的多列引用相同的外键

php - 为什么在使用类名和命名空间时不能实例化这个类?

php - 显示数据库 php 中的 2 张图片

php - 在显示提交按钮的文本区域输入时

javascript - 验证码 2.0 : enable Submit button on callback if recaptcha successful

php - 这是一个 php 错误,还是我的时区/PHP 设置有问题?

php - Zend_Paginator 模糊 MVC 行

PHP 和 CSV 文件 - 如何检测行尾?

javascript - 如何访问放置在 javascript 对象中的对象的属性?

php - 如何在MYsql中存储复选框?