2014-08-28 76 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