2011-04-18 38 views
0

所以我有以下哪些錯誤,但它似乎像PHP應該認識到,它只需要只有一個副本。我應該創建這個作爲參考去除新對象的實例嗎?PHP和使用組合

<?php 
class A { 
    public function __construct(){ 
     echo "within A<br />"; 
     $this->b=new &B(); 
    } 
} 

class B{ 
    public function __construct(){ 
     echo "within B<br />"; 
     $this->a=new A(); 
} 
} 

$jt=new A(); 
$ar=new B(); 

THX


編輯 - ?本來可以被問得更好。我意識到大部分問題都提出來了。將轉移到靜態函數。

+2

當你做'new ...()'你告訴php用這個類的類型創建一個新的對象。它應該如何知道你只想要一個B的單個實例? (提示:使用單例模式) – knittl 2011-04-18 12:35:59

+3

您可能想要將'A'對象作爲構造函數參數傳遞給'B',反之亦然,而不是無條件地在構造函數中創建另一個類的新實例。 – Archimedix 2011-04-18 12:36:09

+0

它需要是'$ this-> b =&new B();' – JohnP 2011-04-18 12:37:24

回答

0

做這樣的:

<?php 
class A { 
    public function __construct(){ 
    echo "within A<br />"; 
    } 

    public function setB(B $b) { 
    $this->b = $b; 
    } 
} 

class B{ 
    public function __construct(A $a){ 
     echo "within B<br />"; 
     $this->a = $a; 
    } 
} 

$a=new A(); 
$b=new B($a); 
$a->setB($b); 

正如評論已經提到別人:

  • 你不需要&的對象總是引用
  • PHP不知道是什麼你想新的總是創建一個新對象
  • 如果你想限制一個類的對象的數量使用單例模式
+0

我同意這一點,但單身人士是有爭議的。我不會去說你永遠不應該使用它們,但你應該謹慎地使用它們。在大多數情況下,你不需要單身,只需要小心一點。 – GordonM 2011-04-18 12:52:10

+1

@戈登,正確的,他們以某種方式取代全局變量。我個人偶爾使用它們,但是當然,你不應該用Singletons搞亂你的整個項目。 – halfdan 2011-04-18 12:53:32