互相依赖会导致内存不足?
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();
}
}
感觉之前也写过类似的代码,不知道为啥这次就会提示内存不足。
A
需要B
的实例,B
需要A
的实例,导致依赖注入无限循环,造成调用栈溢出