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

求助:无法排查Fatal error: Call to a member function find() on null错误原因

问题分析与修复方案

这个错误的根源非常明确——你代码里的**$this->$product是语法误用**,直接导致调用find()方法时对象为null,触发了致命错误。

错误原因拆解

在你的update方法里,这句代码存在明显问题:

if(!$this->$product->find($product->id)->hasStock($quantity)){

这里的$this->$product是PHP的「变量变量」语法,它会尝试把传入的$product对象转换成字符串(通常是类名,比如Product),然后去$this(Basket类实例)里找同名属性。但你的Basket类显然没有这个属性,所以返回null,自然就会抛出「在null上调用find()方法」的错误。

两种修复方向(根据业务逻辑选择)

方向1:直接使用传入的Product对象

如果传入的$product已经是最新的实例,不需要重新查询数据库,那根本没必要调用find(),直接用对象本身验证库存即可:

if(!$product->hasStock($quantity)){

方向2:调用产品查询类实例

如果需要从数据库重新拉取最新的产品数据(避免传入的对象数据过时),那你应该调用Basket类中负责产品查询的属性(比如预设的产品仓库实例),假设这个属性叫productRepo,代码应该改成:

if(!$this->productRepo->find($product->id)->hasStock($quantity)){

注意:要确保Basket类已经正确初始化了productRepo属性,避免它是null。

额外验证点

  • 确认hasStock()方法的逻辑是否正确,能准确判断产品库存是否满足传入的数量
  • 检查Basket类的构造函数,确保产品查询相关的依赖已经正确注入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:36