PHP 类继承 - 内存不足

标签 php class oop

我到处都看到你不能扩展多个类......即

Class Foo{
    //DO FOO STUFF HERE
}

Class Bar{
    //DO BAR STUFF HERE
}

Class FooBar extends Foo,Bar{
    //DO FOOBAR STUFF HERE
}

这是有道理的,但是:

Class Foo{
    //DO FOO STUFF HERE
}

Class Bar extends Foo{
    //DO BAR STUFF HERE
}

Class FooBar extends Foo{
    //DO FOOBAR STUFF HERE
}

例如,您可以让多个子类扩展同一个父类吗?当我尝试这个时,出现内存不足错误,我尝试将内存限制增加到 512MB,但我仍然遇到内存不足错误...

检查内存使用情况的方法是什么,我的意思是这些是非常基本的类,即一个公共(public)变量,Bar 类为 Foo 类中的变量设置值......这是一个常量,但如果我等待 15-20 分钟,然后重试,就可以了。我的问题是,这台服务器有 32GB 的内存,我什至还尝试过将内存设置为 1024M 的愚蠢行为。

[编辑代码:]

Class CORE{
    public $load;
    public $data;
    public $models;
    public function __construct(){
        $this->load=New Loader;
        $this->data=New Database;
        $this->data->db=New PDO(DSN);
    }
    public function __dev_email($subject, $message){
        $to="dev@mydomain.com";
        $headers="From: \"Error Checking\" <dev@mydomain.com>";
        mail($to, $subject, $message, $headers);
    }
}
class Loader extends CORE{
    public function model($name){
        if (file_exists("/var/www/models/".$name.".php")){
            require_once("/var/www/models/".$name.".php");
            $models[$name]=New $name;
        }
    }
}
class Error extends CORE{
    $this->__dev_email("Bad Database Connection", "Invalid Connection Attempt was made. Please check the configuration.");
}

请记住,这不是所有代码,还有一个自动加载器和几个不同的文件,但这是一个基本版本,我刚刚检查过,我仍然遇到内存不足的错误。

最佳答案

问题是,当您初始化 CORE 时,它会创建一个扩展 CORE 的 Loader 的新实例。这会导致再次调用 CORE 构造函数,这又会创建另一个 Loader,这意味着它会永远持续下去,从而导致内存不足错误。

一种可行的方法是在初始化时将 CORE 传递给 Loader 类,如下所示。

Class CORE{
    public $load;
    public $data;
    public $models;
    public function __construct(){
        $this->load=New Loader($this);
        $this->data=New Database;
        $this->data->db=New PDO(DSN);
    }
    public function __dev_email($subject, $message){
        $to="dev@mydomain.com";
        $headers="From: \"Error Checking\" <dev@mydomain.com>";
        mail($to, $subject, $message, $headers);
    }
}
class Loader{
    private $core;

    public function __construct($core){
        $this->core = $core;
    }

    public function model($name){
        if (file_exists("/var/www/models/".$name.".php")){
            require_once("/var/www/models/".$name.".php");
            $this->core->models[$name]=New $name;
        }
    }
}
class Error extends CORE{
    $this->__dev_email("Bad Database Connection", "Invalid Connection Attempt was made. Please check the configuration.");
}

关于PHP 类继承 - 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358790/

相关文章:

php - 常见做法?

c++ - 静态指针 C++ 用法

oop - 根据数学群论设计对象好不好

c# - 使用提供者模式——多个抽象类

php - 在 foreach() 中回显数据库中的信息,仅显示第一行的信息

php - 如何在 yii 事件记录中选择某些列?

php - php函数也会影响子目录吗?

Unity 3D/2D 中的 C# : Am I required to use Classes for every script?

python - 如何从一个窗口(类)到另一个窗口(类)获取进度条 start() 信息?

c# - 在 VB.NET 与 C# 中实现属性的多级继承