3つのクラスがあると仮定しましょう:
スポンサー{ id
[int]、name
[string]、 [プロジェクトsponsoredProjects
オブジェクトの配列]}
プロジェクト{ id
[int]、name
[string]、desc
[string]、 [スポンサーsponsors
オブジェクトの配列]}
学校{ id
[int]、name
[string]、 [プロジェクトオブジェクトprojectsDone
の配列}
私はスポンサーsponsoredProjects
とプロジェクトの間で立ち往生していますsponsors
。
理論的には、プロジェクトを作成する場合は、そのスポンサーも作成する必要があります。スポンサーを作成する場合は、そのプロジェクトも作成する必要があります。
だから、それは彼らの中にスポンサーがいるプロジェクトと彼らの中にスポンサーがいるプロジェクトの無限の配列をもたらすでしょう。私は正しいですか?プロジェクトの配列を持つスポンサーの配列を持つプロジェクトの配列があるので、同じ問題が学校にも当てはまるはずです。
もしそうなら、どうすればこの欠陥を回避できますか?
私の目標は、返された複数の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);
}
}