当我使用很多类扩展时,我收到此错误:
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
但不幸的是它会抛出错误。是什么导致了这个问题?
答案 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()
时。您的构造函数创建一个新的系统对象(它本身就是一个测试对象,然后它会实例化另一个系统对象,然后一直打开,直到内存不足为止。
如果您不需要系统对象来实例化新的系统对象,则应该覆盖构造函数(甚至使用空函数)。