2012-04-18 21 views
0

我知道這可能看起來像一個奇怪的問題,但說我有兩個班;訪問類被引用?

class Class1 { 
    private $foo; 
    function addBar(Class2 &$bar) 
    { 
     $this->foo = $bar; 
    } 
} 


class Class2 { 
    private $foo 
} 

$a = new Class1; 
$b = new Class2; 
$a->addBar($b); 

有什麼辦法可以Class2Class1讀取信息?儘管它們在這裏處於相同的代碼塊中,但它們在我的腳本中處於單獨的文件中。我需要這個的原因是因爲我有Class2通過引用鏈接,但Class2不允許運行,直到Class1已經,我知道我可以通過另一個變量來引用Class2Class1(例如$b->addFoo($a)),但我會如果可能的話避免。

我希望這可以做到!
在此先感謝

編輯

謝謝大家誰的幫助下,我決定去圍繞它的另一種方式。再次感謝你。

+1

addBar()後運行,我不明白你的意思。 – PeeHaa 2012-04-18 12:18:25

+0

因爲'Class2'中的代碼我不想運行到'Class1',但它們之間的唯一參考是從'Class2'到'Class1' – 2012-04-18 12:19:38

+0

然後只需按正確的順序調用東西?我沒有看到這個問題..(添加更多的代碼也許?) – Ing 2012-04-18 12:24:26

回答

0

Class2可以調用Class1對象的方法,但它不能訪問私有數據。但它必須參考Class1實例才能調用其中的任何方法。

您的示例沒有顯示Class2實際上包含任何代碼,並且您聽起來像試圖避免在$b上調用方法。這沒有意義。 Class2不能「做」什麼如果你從來沒有調用任何方法。

+0

是的,但這是示例代碼。基本上我想知道的是,雖然我可以通過'$ this-> foo-> foo'從'Class1'中的'Class2'獲取信息,但是可以通過'&$ bar'引用來共享信息。 – 2012-04-18 12:25:18

+0

「Class1」方法引用了「Class2」實例並不會使「Class2」實例引用「Class1」實例。在某個地方,你需要調用'$ b'上的方法並傳遞'$ a'作爲參數。 – Wyzard 2012-04-18 12:30:44

1
class Class1 { 
    private $foo; 
    function addBar(Class2 $bar) 
    { 
     $this->foo = $bar; 
     $bar->addBar($this); 
    } 
} 

class Class2 { 
    private $foo 
    function addBar(Class1 $bar) 
    { 
     $this->foo = $bar; 
    } 
} 

$a = new Class1; 
$b = new Class2; 
$a->addBar($b); 
+0

我刪除了'&'引用,因爲它[不需要](http://php.net/manual/en/language.oop5.references.php)。 – DampeS8N 2012-04-18 12:35:19

0
class Class1 { 
    private $foo; 
    function addBar(Class2 &$bar) 
    { 
     $this->foo = $bar; 
     $bar->doSomething(); 
    } 
} 


class Class2 { 
    private $foo 
    function doSomething() 
    { 
     //code 
    } 
} 

$a = new Class1; 
$b = new Class2; 
$a->addBar($b); 

這樣doSomethingClass2()Class1