Php 使用类扩展时超出了致命的允许内存大小
当我使用大量的类扩展时,会出现以下错误:Php 使用类扩展时超出了致命的允许内存大小,php,class,methods,extend,public-method,Php,Class,Methods,Extend,Public Method,当我使用大量的类扩展时,会出现以下错误: 致命错误:第5行的C:\Web\private\bootstrap.php中允许的内存大小134217728字节已用完(试图分配65488字节)(我确保这实际上是下面代码的行。我的原始代码是第22行。) 这是我的代码(大量删节,但仍然会产生错误。我的原始代码有This->This6级深!) 这应该只输出一个hello,但不幸的是,它会抛出错误。是什么导致了这个问题?递归 当您实例化系统时,您正在扩展测试,该测试调用构造()方法,该方法反过来创建一个新的系
致命错误:第5行的C:\Web\private\bootstrap.php中允许的内存大小134217728字节已用完(试图分配65488字节)(我确保这实际上是下面代码的行。我的原始代码是第22行。)
这是我的代码(大量删节,但仍然会产生错误。我的原始代码有This->This
6级深!)
这应该只输出一个hello
,但不幸的是,它会抛出错误。是什么导致了这个问题?递归
当您实例化系统
时,您正在扩展测试
,该测试调用构造()
方法,该方法反过来创建一个新的系统
对象,该对象扩展测试
并调用构造()
,等等
如果system
扩展了test
,为什么要在test
类中创建一个新的system
对象?递归
当您实例化系统
时,您正在扩展测试
,该测试调用构造()
方法,该方法反过来创建一个新的系统
对象,该对象扩展测试
并调用构造()
,等等
如果system
扩展了test
,为什么要在test
类中创建一个新的system
对象?您编写的代码会导致无限的递归循环
当您创建一个新测试时,它会创建一个新系统,它会调用测试的构造函数(因为它继承了它),从而创建一个新系统。。。重复一遍
如果您从系统中删除了固有功能,那么它将正常工作
class system { // System classes and methods.
public function demo($string = 0){echo $string;}
}
您的代码导致了无限的递归循环
当您创建一个新测试时,它会创建一个新系统,它会调用测试的构造函数(因为它继承了它),从而创建一个新系统。。。重复一遍
如果您从系统中删除了固有功能,那么它将正常工作
class system { // System classes and methods.
public function demo($string = 0){echo $string;}
}
您正在创建一个无限循环
当您尝试实例化新测试()
时。您的构造函数创建一个新的系统对象(它本身是一个测试对象,您可以使用它来实例化另一个系统对象,一直到内存耗尽为止)
如果不需要系统对象来实例化新的系统对象,则应重写构造函数(甚至使用空函数)。您正在创建一个无限循环
当您尝试实例化new test()
时,构造函数会创建一个新的系统对象(它本身就是一个测试对象),然后它会实例化另一个系统对象,一直实例化到内存耗尽为止
如果不需要系统对象来实例化新的系统对象,则应重写构造函数(甚至使用空函数)。或者如果他删除了实例化类的调用,而该类在$this
;)中已经有引用,或者如果他删除了实例化一个类的调用,这个类在$this
;)中已经有了引用,这是一个很好的观点。我的问题是,我希望有一个扩展位(如$test->this->accessDB()
)可以访问数据库,数据库连接打开并包含在第一个类中,称为$test
。我需要在没有扩展的情况下保留来自“父”类的数据库连接和数据。我可以这样做吗?数据库连接在哪里?在测试中
或在系统中
?您想在哪里使用它们-测试
或系统
?对不起,它们在测试
中,但在系统
中使用。由于应用程序的布局方式,它们必须留在test
中。system
扩展了test
,因此通过继承,它将拥有test
可用的所有属性和方法。如果test
有一个名为accessDB()
的方法,那么只需从system
调用$this->accessDB()
。哦,我的意思是,如果我从类中删除每个扩展测试
,它还会继承吗?这是一个很好的观点。我的问题是,我希望有一个扩展位(如$test->this->accessDB()
)可以访问数据库,数据库连接打开并包含在第一个类中,称为$test
。我需要在没有扩展的情况下保留来自“父”类的数据库连接和数据。我可以这样做吗?数据库连接在哪里?在测试中
或在系统中
?您想在哪里使用它们-测试
或系统
?对不起,它们在测试
中,但在系统
中使用。由于应用程序的布局方式,它们必须留在test
中。system
扩展了test
,因此通过继承,它将拥有test
可用的所有属性和方法。如果test
有一个名为accessDB()
的方法,那么只需从system
中调用$this->accessDB()
。哦,我的意思是,如果我从类中删除每个扩展测试
,它还会继承吗?