互相依赖会导致内存不足?

nginx错误日志

今天遇到了一个内存不足的问题,以前写的接口之前还没有问题,今天突然就提示500,然后去项目log里查,还没有查到错误记录,然后查了nginx的error.log,发现错误提示PHP message: PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes)

错误位置

反复排查之后,确认了问题所在,大概如下代码

# A.php
class A {
    protected $b;
    public function __construct(B $b) {
        $this->b = $b;
    }
    public function haha() {
        $this->b->wow();
    }
}
# B.php
class B {
    protected $a;
    public function __construct(A $a) {
        $this->a = $a;
    }
    public function wow() {
        echo "1"; // 具体逻辑
    }
}
# C.php
class C {
    protected $a;
    public function __construct(A $a) {
        $this->a = $a;
    }

    public function do() {
        $this->a->haha();
    }
}

感觉之前也写过类似的代码,不知道为啥这次就会提示内存不足。

--Max--
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

A需要B的实例,B需要A的实例,导致依赖注入无限循环,造成调用栈溢出

2年前 评论
Maxwells (楼主) 2年前
讨论数量: 3

A需要B的实例,B需要A的实例,导致依赖注入无限循环,造成调用栈溢出

2年前 评论
Maxwells (楼主) 2年前
╰ゝSakura

A需要B构造,B示例需要A构造,这不就是死循环了嘛?

2年前 评论
Maxwells (楼主) 2年前
陈先生

你这属于循环依赖了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!