【发布时间】:2013-12-03 18:24:19
【问题描述】:
我到处都看到你不能扩展多个类......即
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,但仍然出现内存不足错误...
什么是检查内存使用情况的方法,我的意思是这些是非常基本的类,即一个公共变量,而 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.");
}
请记住,这不是全部代码,还有一个 Autoloader 和几个不同的文件,但这是一个基本版本,我刚刚检查过,我仍然从中得到内存不足的错误。
【问题讨论】:
-
当然,您可以扩展一个可扩展的类。您遇到的问题是您的
//DO STUFF HERE实现中的问题。例如,如果您要在其自己的构造函数中实例化一个对象的实例,从而导致无限的实例化链...... -
是的,它是有效的。你基本上只是在分支家谱。这样的继承不是简单的 sizeof(Foobar) + sizeof(Foo)。继承的全部意义在于代码被重用。从技术上/模糊地说,sizeof(Foobar) 将是
sizeof(Foo) + sizeof(any changes made in Foobar that aren't in Foo) -
让我发布一些代码......一秒钟
-
构造函数也被继承......当你初始化
Loader实例时,CORE构造函数被调用......它试图初始化新的Loader。基本上:你有无限循环。另外,我真的希望这不是一些“mvc 框架”。在过去的一个小时内,我们已经发布了 4 个这样的帖子。 -
@JustinE 你不应该在这里使用继承。而是考虑组合,也许通过依赖注入。