php - 从类扩展时出现内存错误

标签 php class memory instances

使用错误下方的代码时出现以下错误。 你能告诉我我做错了什么吗?

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in D:\dev\TESTCASE_classes_layout\main.class.php on line 18

这是我使用的代码:

<?php

include('test_class1.php');
include('test_class2.php');
include('test_class3.php');

class Main_Class{

    protected $test_class1;   
    protected $test_class2;
    protected $test_class3;

    private $objects_array = array();


    public function Main_Class(){

        $this->test_class1 = new Test_Class1();
        $this->objects_array['test_class1'] = $this->test_class1; 
        $this->test_class2 = new Test_Class2();
        $this->objects_array['test_class2'] = $this->test_class2;
        $this->test_class3 = new Test_Class3();
        $this->objects_array['test_class3'] = $this->test_class3;

    }

    public function get_Objects(){

        return $this->objects_array;

    }

}

?>

这是我用于所有三个测试类的代码。仅类名编号和函数名称编号是完全相同的代码。

<?php

class Test_Class1 extends Main_Class{

    function test1(){
        return 'hello';
    }

}

?>

这与延伸部分有关。因为当我删除扩展部分时它会起作用。

这是我的目标:

我正在尝试实例化此类中的类并从中扩展,以便所有类都可以相互调用,而无需生成该类的另一个实例。

也许有更好的方法,如果您知道,请告诉我。

最佳答案

每次创建 Main_Class 类型的对象、或其子类之一时,都会调用构造函数。

由于您在此创建过程中创建了子类型的对象,因此您会遇到无限循环,该循环会在内存耗尽或达到内存限制时结束:

new Main_Class()            calls ...
Constructor of Main_Class   calls ...
new Test_Class1()           calls ...
Constructor of Test_Class1  calls ...
Constructor of Main_Class   calls ...
new Test_Class1()           calls ...
...

相反,您应该在静态方法中创建对象。但即使你这样做了,请注意你的目标违反了encapsulation的重要原则。并将导致极其糟糕的设计。相反,您可能希望拥有对 Main_Class 类型的任意对象进行操作的方法,并重写这些方法(即在每个类中都有一个 test 方法)。

关于php - 从类扩展时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701579/

相关文章:

Java Tomcat "OutOfMemoryError: Java heap space"由无休止的 session 引起?

java - Java 中的流如何影响内存消耗?

php - 基于数据库(PHP 和 MySql)生成建议

java - 使用 System.out.println() 的目的是什么

c - c中的内存分配问题

C++ 在文件之间传递类实例

python - 在 Python 类中编写 __init__ 方法的文档字符串的首选位置在哪里?

php - 将 C++ 程序作为 cronjob 运行时出现问题

php - 触发单个查询来获取网格分页的记录

Php Hack中使用反射获取泛型类型