如何访问类中的其他类方法(PHP)

时间:2015-06-18 18:35:33

标签: php oop model-view-controller

我正在构建一个供个人使用的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之外的页面。

谢谢

2 个答案:

答案 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);
    }   
}