使用类扩展时超过了致命的允许内存大小


Fatal allowed memory size exceeded when using class extend

当我使用很多类扩展时,我会得到以下错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65488 bytes) in C:'Web'private'bootstrap.php on line 5(我确定这实际上是下面代码的行。我原来的代码是第22行。)

这是我的代码(大量删节,但仍然会产生错误。我的原始代码有this->this 6级深度!)。

class test { // Root class.
    public $system;
    function __construct() {
        $this->system = new system();
    }
}
class system extends test { // System classes and methods.
    public function demo($string = 0){echo $string;}
}
$test = new test();
$test->system->demo("hello");

这应该只输出一个hello,但不幸的是,它反而抛出了错误。是什么导致了这个问题?

递归

当您实例化system时,您正在扩展test,它正在调用__construct()方法,这反过来又创建了一个新的system对象,它扩展了test并调用了__construct()

如果system扩展了test,为什么要在test类中创建一个新的system对象?

您的代码导致了递归的无限循环。

当你创建一个新的测试时,它会创建一个全新的系统,它会调用测试的构造函数(因为它继承了它),从而创建一个崭新的系统。。。重复

若您从系统中删除固有项,那个么它将正常工作。

class system { // System classes and methods.
    public function demo($string = 0){echo $string;}
}

您正在创建一个无限循环。

当您尝试实例化new test()时。你的构造函数创建了一个新的系统对象(它本身就是一个测试对象,然后你会实例化另一个系统对象,然后一直实例化,直到你耗尽内存

如果你不需要系统对象来实例化一个新的系统对象,你应该重写构造函数(甚至用一个空函数)。