假设有三种等级:
Sponsor id <[int], name
[string], 赞助的项目
[字符串], 赞助的项目
[数组 Project 对象]}
project > id [int], name
[string], desc
[string], succors
<[强势>Sponsor 对象的数组]}
" 强 " 学校 < /强'学校 < /强'code > id < /code > [int], name
[string], projectsDone
[强 " 强 " 项目 强 " 对象的数组]
我被困在 < strong > sponsor s < code > 赞助的项目 和 < strong > Project s < code > 赞助者 之间。
从理论上讲,如果我创建一个“强”项目 < / 强”, 那么我也需要为此创建“ 强” 赞助人 < / 强” 。 如果我创建了“强” 赞助人 < / 强”, 那么我也需要为此创建“强” 项目 < / 强” 。
因此,这会造成无穷无尽的 " 强 " 项目 强 " 和 " 强 " 子项目 强 ",其中 " 强 " 项目 强 " 和 " 强 " 项目 强 ",其中 " 强 " 和 " 强 " 子项目 强 ",等等。 我说对吗?同样的问题也应适用于 " 强 " 学校 强 ",因为它们有 " 强 " 项目 强 " 的阵列,有 " 强 " 子项目 强 ",有 " 强 " 项目 强 " 等。
如果是这样的话,我该如何避免这一缺陷?
我的目标是从返回的多个 SQL 结果中临时创建所有这些对象, 然后再将它发送到 JavaScript 页面 。
final class Sponsor{
private $_id;
private $_name;
private $_projects;
public function __construct($id, $name, Project $projects){
$this->setSponsor($id, $name, $projects);
}
public function getId(){
return $this->_id;
}
public function getName(){
return $this->_name;
}
public function getProjects(){
return $this->_projects;
}
private function setId($id){
$this->_id = $id;
}
private function setName($name){
$this->_name = $name;
}
private function setProject(Project $projects){
$this->_projects = array();
foreach($projects as $val){
array_push($this->_projects, $val);
}
}
private function setSponsor($id, $name, Project $projects){
$this->setId($id);
$this->setName($name);
$this->setProjects($projects);
}
}
final class Project{
private $_id;
private $_name;
private $_desc;
private $_sponsors;
public function __construct($id, $name, $desc, Sponsor $sponsors){
$this->setProject($id, $name, $desc, $sponsors);
}
private function setId($id){
$this->_id = $id;
}
private function setName($name){
$this->_name = $name;
}
private function setDesc($desc){
$this->_desc = $desc;
}
private function setSponsors(Sponsor $sponsors){
$this->_sponsors = array();
foreach($sponsors as $obj){
$id = $obj->getId();
$name = $obj->getName();
$projects = $obj->getProjects();
array_push($this->_sponsors, new Sponsor($id, $name, Project $this));
}
}
private function setProject($id, $name, $desc, Sponsor $sponsors){
$this->setId($id);
$this->setName($name);
$this->setDesc($desc);
$this->setSponsors($sponsors);
}
}
final class School{
private $_id;
private $_name;
private $_projectsDone;
public function __construct($id, $name, Project $projects){
$this->setSchool($id, $name, $projects);
}
private function setId($id){
$this->_id = $id;
}
private function setName($name){
$this->_name = $name;
}
private function setProjectsDone($projects){
$this->_projectsDone = array();
foreach($projectsDone as $val){
$this->{_projectsDone}[] = $val;
}
}
public function setSchool($id, $name, $projectsDone){
$this->setId($id);
$this->setName($name);
$this->setProjectsDone($projectsDone);
}
}