2014-08-28 79 views
0

我想問一下PHP對象中的遞歸是否被很好地處理,如果可以接受的話。因爲我寧願有這個PHP類遞歸

class Human{ 

    public $pet; 

    function setPet($pet){ 
     $this->pet = $pet; 
    } 

} 

class Pet{ 
    public $owner; 

    function __construct($owner){ 
     $this->owner = $owner; 
    } 
} 

$a = new Human(); 
$b = new Pet($a); 

$a->setPet($b); 

不是用戶的一個數組,那麼寵物的主人保存爲ID,並在我需要獲取寵物的主人之際,我需要做的是這樣

$arrayOfUsers[$pet->owner] 

正如你所看到的,絕對不是漂亮。與其他方法相比,這種遞歸內存是否節省?它是安全的嗎?它是一種好習慣嗎?

+2

這些被稱爲「循環依賴」。他們被認爲是代碼中的錯誤。 – 2014-08-28 21:28:17

+1

這不是遞歸。這只是一個嵌入另一個的對象。遞歸是指一系列函數/方法調用最終再次調用自己。例如'function foo(){foo(); } – 2014-08-28 21:29:42

+0

@tereško如果這被認爲是一個錯誤,這個功能如何以正確的方式實現?我的意思是訪問寵物的主人,如果我不能參考它? – 2014-08-28 21:31:53

回答

0

這與Recursion無關。 如果一個人有寵物,那麼一個寵物不能擁有一個人,否則你會創建一個循環依賴,這是一個不好的習慣。

如果你想找到寵物的主人只有寵物,你可以試試這個。

1從人類中移除寵物。

class Human{ 
    public $field1; 
    public $field2; 
    //etc 
} 

2的用戶ID添加到寵物

​​

這使您可以:

  1. 如果你只有所有者(人),你只想取回害蟲使用owner_id在寵物的桌子上查找。
  2. 如果你只有寵物,並且你想重試所有者(人類),那麼只需使用owner_id來查看所有者(人)的表格。

但是我必須指出,在這種方法中,兩個類之間的關係並不那麼清楚。 如果你單獨看人類,你不能說出它與寵物類的關係。所以我相信這樣做肯定有更好的辦法

+0

我認爲這是遞歸,因爲'var_dump'這麼說。 – 2014-08-29 10:08:49