2015-06-18 58 views
1

我正在構建供個人使用的PHP OOP MVC框架。如何訪問類中的其他類方法(PHP)

我想知道是否有一種方法或正確執行以下操作:

能夠從一個「子」調用一個方法(不擴展)的另一個「繼承」。我的意思是... 我有一個類爲每個子類創建新對象,而不是使用繼承。讓我們把它叫做MainClass,它有3個 「子」 像這樣

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(); 

初始化I例如

$MainClass->utils->show_text("Hello World"); 

而且工作得很好做。

我想要做的是...在$ MainClass-> utils-> test()(另一種測試方法)中,能夠訪問$ MainClass-> db而不使用全局或$ GLOBALS 。

有沒有其他方法可以實現這一目標?爲了能夠訪問另一個子方法內的$ MainClass方法和子方法(從utils和MainClass初始化的主頁面訪問數據庫)?它會怎樣?我希望能夠訪問子方法,比如utils可以訪問數據庫和表單方法。以及MainClass之外的頁面。

謝謝

+1

添加「依賴注入」到你的搜索現有答案的一些想法可能。 – ficuscr

+0

使用'$ this-> utils = new vfw_utils($ this)將您的MainClass實例注入到vfw_constructor中;'當您實例化它時....修改vfw_utils構造函數以將該參數設置爲屬性,等等 –

回答

2

如果utils必須使用db,您可能已到MainClass實例傳遞給utils的,所以它可以調用$this->myRefToMain->db,或通過的db本身的實例,所以utils的可以調用$this->db。無論哪種方式,它都無法(合理地)爬取調用堆棧來查找調用它的對象。

+0

謝謝。我是這麼做的,但是我沒有將它傳遞給構造函數,而是在子類中調用loadFramework(),然後在MainClass上調用所有子類的loadFramework()方法。我不知道這是否正確。但是你的代碼更好。謝謝。 – luffyff

0

對象如果您的班級class_utils可以存在沒有MainClass。其方法test()應該訪問類class_db的某個對象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); 
    } 
}