0

我一直在制作自己的 PHP 框架,我遇到了这个问题,我找不到答案,所以为了使它成为我这样编码的模式:

class post_control extends LoopControl
{
    var $model;

    function __construct()
    {
        parent::__construct();
        $classname = get_class($this);
        $this->model = new $classname();
    }

}

我收到此错误:

致命错误:第 23 行的 /opt/lampp/htdocs/LoopWork/admin/core/model/Form.class.php 中允许的内存大小为 134217728 字节已用尽(尝试分配 77 个字节)<

问题2:

我真的用了这么多内存?如何 ?

事实1:

如果我编码 new post_model(); 我没有收到此错误。

考虑到事实 1,我认为这些形成班级新立场的方式之间存在差异。

已经谢谢了!

4

3 回答 3

1

在您的示例中,您基本上创建了post_control一个无限次的实例。这就是您的脚本消耗所有内存的原因。

class post_control extends LoopControl
{
    var $model;

    function __construct()
    {
        parent::__construct();
        $classname = get_class($this);
        $this->model = new $classname(); // this is the line where you instantiate a 
        //new post_control, and again post_control constructor is call, and a new instance
        //is created.. and so on for infinite times
}

}
于 2013-10-27T13:01:37.167 回答
0

是的,您正在用尽系统的所有内存。那是因为你的构造函数创建了一个无限递归:

class post_control extends LoopControl
{
    var $model;

    function __construct()
    {
        parent::__construct();
        $classname = get_class($this); // evaluates to 'post_control'
        $this->model = new $classname(); // equiv to new post_control();
    }

}

创建一个post_control后,它将尝试post_control为其$model属性创建另一个。反过来,这将调用相同的构造函数,该构造函数将尝试post_control为自己创建一个新的$model,依此类推,直到永恒……

于 2013-10-27T13:01:30.787 回答
-1

$classnamepost_control,不在post_model你的例子中。您正在递归调用构造函数。无限递归消耗所有可用内存,从而产生致命错误。

于 2013-10-27T12:59:13.730 回答