2011-10-07 84 views
0

好了,所以代碼這是我控制的作品外是這樣的:如何獲得使用的屬性名稱由外對象從內對象內的對象在PHP

Class A { 

    function use_b($b_name) { 
     $this -> $b_name = new B(); 
    } 
} 

Class B { 
    var $stuff; 
} 

這樣的對象類B在類A內部,並且類A將使用傳入名稱作爲類B屬性的屬性名稱。 B類完全不知道它給出的名稱,實際上並不需要知道。但我需要知道它是爲了從類A訪問B類。

我確實有足夠的控制權,可以爲類B創建屬性並將其設置爲名稱類A給出它的if這是可能的。然後我可以讓類B把它的名字傳回給我需要遍歷類B的函數(目前它只返回外部對象,所以我有權訪問類BI,但不知道它的名稱)。

如果沒有任何意義,請評論並告訴我。

+0

所以你不能實際編輯use_b方法/編輯任何類A? – Max

回答

1

找出A的持有B實例的成員並不難。試試這個代碼:

<?php 
Class A { 
    function use_b($b_name) { 
     $this -> $b_name = new B(); 
    } 
} 

Class B { 
    var $stuff; 
} 

$a = new A(); 
$a->use_b('test'); 

foreach(get_object_vars($a) as $key=>$val) 
    if(get_class($val) == 'B') 
     echo $key . " is the member that holds an instance of B"; 
+0

不幸的是,還有一個問題。對於一個(不挑剔,但...),我希望避免循環通過外部對象。更大的問題是use_b可能被多次調用。我會有一個短名單來工作,但仍然沒有完整的證明。 – Anthony

+0

我不確定如果我正確地得到您的問題:您只能訪問A的對象,在成員中持有B的多個實例,其名稱您不知道。即使B知道變量的名稱,你會從中受益多少? – janoliver

+0

偉大的問題! B有一個方法,其中包括調用所有自定義函數註冊到類型A的記錄,並將這些函數傳遞一些稀疏信息以及整個A對象。 B還具有與B的關係所特有的一些屬性,它存儲爲B的屬性,而不是將它們傳遞給A(這很有意義,實際上,因爲A可以有多個B)。我需要B也傳遞它的屬性名稱(如果可能的話),以便我可以獲得這些特定於B的屬性並在我的函數中做出相應的響應。我認爲,如果讓B在功能中傳遞自己,那將太昂貴了...... – Anthony