0

当我使用很多类扩展时,我得到这个错误:

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->this6 层!)。

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,但不幸的是它会抛出错误。是什么导致了这个问题?

4

3 回答 3

3

递归

当您实例化时system,您正在扩展test调用该方法的__construct()方法,而该方法又创建了一个新system对象,该对象扩展test并调用了__construct()等等。

如果extends ,你为什么要system在你的类中创建一个新对象?testsystemtest

于 2013-02-13T21:53:58.820 回答
0

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

当你创建一个新的 Test 时,它会创建一个新的 System,它调用 Test 的构造函数(因为它正在继承它),它会创建一个新的 System ...重复。

如果您从系统中删除了继承,那么它将正常工作。

class system { // System classes and methods.
    public function demo($string = 0){echo $string;}
}
于 2013-02-13T21:54:16.520 回答
0

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

当您尝试实例化new test(). 您的构造函数创建一个新的系统对象(它本身是一个测试对象,然后您将实例化另一个系统对象并不断地实例化,直到您耗尽内存。

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

于 2013-02-13T22:05:15.720 回答