gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:03:08 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com