You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取非对象的'charge'属性报错,求排查Blade模板代码问题

报错分析:Trying to get property 'charge' of non-object

报错原因

你的Blade模板代码里,{{getAmount($data ?? ''->charge)}}这一行存在运算符优先级问题:

  • 空合并运算符??的优先级低于对象访问符->,代码实际执行顺序是$data ?? (''->charge),空字符串''不是对象,尝试访问它的charge属性就会触发这个错误。
  • 即便$data为null,??返回空字符串后,依然会执行->charge的访问操作,这必然会报错。

解决办法

根据你的PHP版本,选择以下任意一种修正方式:

方式1:使用可选链式调用(PHP 7.4+ 支持)

用?->替代直接的->,配合??给默认值,确保$data不存在时不会触发属性访问:

<td>{{ getAmount($data?->charge ?? '') }} @lang($basic->currency)</td>
<td>@lang($transaction->remarks)</td>
<td>{{ dateTime($transaction->created_at, 'd M Y h:i A') }}</td>

$data?->charge会在$data为null或非对象时直接返回null,再通过?? ''将null转为空字符串,避免getAmount函数接收非法值。

方式2:明确括号优先级

如果项目PHP版本较低,不支持可选链式调用,可通过括号强制先执行空合并判断:

<td>{{ getAmount(($data ?? null)->charge ?? '') }}</td>
<td>@lang($transaction->remarks)</td>
<td>{{ dateTime($transaction->created_at, 'd M Y h:i A') }}</td>

先通过($data ?? null)确保得到对象或null,再访问charge属性,最后用?? ''处理属性不存在的情况。

方式3:传统条件判断

最兼容的写法,适合所有PHP版本:

<td>{{ getAmount(isset($data) ? $data->charge : '') }} @lang($basic->currency)</td>
<td>@lang($transaction->remarks)</td>
<td>{{ dateTime($transaction->created_at, 'd M Y h:i A') }}</td>

先判断$data是否存在,存在则取charge属性,否则传空字符串。

内容的提问来源于stack exchange,提问作者Zacharia Stephano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:35:19