当我使用很多类扩展时,我会得到以下错误:
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()
时。你的构造函数创建了一个新的系统对象(它本身就是一个测试对象,然后你会实例化另一个系统对象,然后一直实例化,直到你耗尽内存
如果你不需要系统对象来实例化一个新的系统对象,你应该重写构造函数(甚至用一个空函数)。