求助:无法排查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
相关产品推荐
相关产品推荐

