2014-06-27 118 views
0

假設我有以下(PHP僅供參考)作爲實例屬性的實例是否可以訪問主實例的其他屬性?

myClassA{ 
    private $myClassB; 
    private $myClassC; 

    function __construct(){ 
     $this->myClassB = new myClassB(); 
     $this->myClassC = new myClassC(); 
    } 
} 

而且我們說myClassB是一個數據庫連接管理器,將建立和密切的聯繫,但從來不寫或從連接讀取。

我現在想用myClassC寫一個通過myClassB管理的數據庫連接。假設myClassC具有一個名爲save_user()的功能,用於保存用戶數據。

save_user是否可能包含引用內myClassA的實例的代碼。例如,如果我知道myClassC僅會一myClassA內部創建和myClassA總會有myClassB管理其連接,那麼有可能是myClassC包含一行代碼如

//$this refers to myClassC 
$connection_to_write_to = $this->OBJECT_IM_INSIDE_OF->myClassB->db_connection_1->; 

我猜我想知道,如果裏面myClassC功能將能夠直接訪問的myClassA屬性或我必須做

myClassC->myFunction(myClassA->property_I_want) 

訪問,我想在使用的myClassA屬性0。

+0

沒有,有沒有自動反向引用。如果你想這樣做,你需要在'ClassC'中添加一個屬性來保存這個屬性,並將'this-> myClassB'作爲參數傳遞給'ClassC'構造函數。 – Barmar

回答

0

在你ClassC定義,你應該做的:

class ClassC { 
    private parentClassB; 

    function __construct($classB) { 
     $this->parentClassB = $classB; 
    } 
    ... 
} 

然後你ClassA構造看起來像:

function __construct(){ 
    $this->myClassB = new myClassB(); 
    $this->myClassC = new myClassC($this->myClassB); 
}