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

时间:2013-02-13 21:50:23

标签: php class methods extend public-method

当我使用很多类扩展时,我收到此错误:

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

3 个答案:

答案 0 :(得分:2)

递归

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

如果__construct()扩展system,为什么要在test课程中创建新的system对象?

答案 1 :(得分:0)

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

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

如果您从系统中移除了不良,那么它将正常工作。

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

答案 2 :(得分:0)

你正在创造一个无限循环。

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

如果您不需要系统对象来实例化新的系统对象,则应该覆盖构造函数(甚至使用空函数)。