假设有三个类:
赞助商{id
[int], name
[string], providedProjects
[数组 项目对象]}
项目{id
[int], 名称
[字符串], desc
[字符串], sponsors
[Sponsor 对象数组]}
学校{id
[int], name
[string], projectsDone
[数组 项目对象}
我陷入了赞助商的赞助项目
和项目的赞助商
之间。
理论上,如果我创建一个项目,那么我也需要为其创建赞助商。如果我创建赞助商,那么我也需要为其创建项目。
因此,这将导致无穷无尽的项目数组,其中包含赞助商,其中项目包含赞助商> 在他们之内等等。我说得对吗?同样的问题也应该适用于学校,因为他们有项目数组,其中有赞助商数组,其中有项目数组> 等等。
如果是这样,我应该如何避免这个缺陷?
我的目标是临时从返回的多个 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);
}
}
最佳答案
你有一个 circular reference问题。不要让每个对象都保存与其相关的对象的数组,而是尝试保留其 id 的数组并在需要时查找相关实体。
关于php - 困惑 : Endless arrays within arrays inside my class' data members. 类设计不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757480/