我正在构建一个供个人使用的PHP OOP MVC框架。
我想知道是否有方法或正确实施以下内容:
能够从“子类”(未扩展)调用方法到另一个“子类”。我的意思是... 我有一个类为每个子类创建新对象而不是使用继承。我们称之为MainClass,它有3个“SubClasses”,就像这样
class MainClass {
public $db;
public $forms;
public $pagination;
function __construct() {
$this->db = new class_db();
$this->forms = new class_forms();
$this->utils = new class_utils();
}
}
初始化是
$MainClass = new MainClass();
我可以做例如
$MainClass->utils->show_text("Hello World");
工作正常。
我想做的是......在$ MainClass-> utils-> test()(另一种测试方法)中,能够访问$ MainClass-> db而不使用全局或$ GLOBALS。
有没有其他方法可以实现这一目标?能够在另一个子方法中访问$ MainClass方法和子方法(从utils和MainClass初始化的主页面访问db)?怎么会这样?我希望能够访问子方法,例如utils能够访问db和forms方法。以及MainClass之外的页面。
谢谢
答案 0 :(得分:2)
如果utils
必须使用db
,您必须将MainClass实例传递给utils,以便它可以调用$this->myRefToMain->db
,或者传递db
本身的实例,所以utils可以调用$this->db
。无论哪种方式,它都不能(合理地)爬上调用堆栈来找到调用它的对象。
答案 1 :(得分:0)
如果您的班级class_utils
可以在没有MainClass
的情况下存在,则为对象。其方法test()
应该访问类db
的某个对象class_db
。这意味着class_utils
取决于class_db
,您应该在构造函数中注入class_db
的对象,例如:
class MainClass {
public $db;
public $forms;
public $pagination;
function __construct() {
$this->db = new class_db();
$this->forms = new class_forms();
$this->utils = new class_utils($this->db);
}
}