Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当非对象的属性明显是对象上的属性时,尝试获取该属性_Php - Fatal编程技术网

Php 当非对象的属性明显是对象上的属性时,尝试获取该属性

Php 当非对象的属性明显是对象上的属性时,尝试获取该属性,php,Php,早上好,很简单,为什么当我访问我的对象时会出现“尝试获取非对象的属性”错误 回音打印(票据[‘交易]) 结果如下: Array ( [transactions] => Array ( [0] => stdClass Object ( [vendor] => 1 [total] => 8934 [payment_terms] =&g

早上好,很简单,为什么当我访问我的对象时会出现“尝试获取非对象的属性”错误

回音打印(票据[‘交易])

结果如下:

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
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 print_r($t); ?></td>
 @endforeach
然后,当我最终使用->访问其属性时

@foreach($bill['transactions'] as $t)
<td><?php echo $t->vendor; ?></td>
@endforeach
@foreach($t形式的票据['transactions'))
@endforeach

然后我得到了错误。顺便说一下,正如@Taalaibek所说,我正在使用LaravelBlade,代码的问题在于您试图访问非对象的属性。您的数组
$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
@foreach($t形式的票据['transactions'))
@endforeach

使用该函数。

显示完整对象在ithelle@varunaharia中没有事务。当我使用print\r($t)时,上述对象是$t的内容;不需要在foreach中输入它,直接使用对象及其属性Hello@Ghost我需要在foreach循环中输入它,因为$bill['transactions']是一个对象数组。$bill['transactions']不完全是一个对象数组,它是一个混合数组,您的[past_due]=>44是整数。