0
I need to build a structure similar to a family tree, but with only one Father element that can have "n" children, and each child can also have "n" children. The structure below illustrates a test that would power this tree.
Here is the code that should test the tree structure:
$arvore = new No('Thiago'); //Aqui cria-se a arvore, ou elemento Pai
$no = $arvore->addFilho('Alan'); //Alan deveria ser um filho de Thiago, seguindo a estrutura
$no->addFilho('Thiago'); //Já nessa linha, a ideia era que fosse adicionado a Alan, um filho chamado Thiago
//assim como a linha de baixo, resultando em dois filhos para Alan.
// Mas me resulta um erro no PHP:
// Fatal error: Uncaught Error: Call to a member function addFilho() on null
$no->addFilho('Thiago');
$no = $arvore->addFilho('Robson'); //Robson também seria filho de Thiago, que é a Arvore/elemento Pai
$no->addFilho('Maurício'); //E mauricio seria filho de Robson, assim como Bruno e Xuxa
$no1 = $no->addFilho('Bruno');
// Rodolpho e Guilherme são filhos do Bruno
$no1->addFilho('Rodolpho');
$no1->addFilho('Guilherme');
$no->addFilho('Xuxa');
$arvore->addFilho('Eduardo');
$arvore->addFilho('Alexandre')->addFilho('Gabriel');
echo "\n".$arvore->busca('Thiago'); //Deve retornar true, pois existe no nó da arvore
echo "\n".$arvore->busca('Xuxa'); //Deve retornar true, pois existe no nó da arvore, como filho
echo "\n".$arvore->busca('Fábio'); //Deve retornar false pois não existe no nó da arvore
Now enter the part I’m not knowing how to develop, which is Class No:
class No {
public $arvore = array();
public $filho = array();
function __construct($arvore){
$this->$arvore[] = $arvore;
}
public function getArvore(){
return $this->arvore[0];
}
public function addFilho($filho){
if(!isset($this->filho)){
$this->filho[] = $filho;
$this->arvore[getArvore()][] = $filho;
} else{
$this->arvore[][$filho] = $filho;
$this->filho[$filho] = $filho;
}
}
public function busca($elemento){
foreach ($this->arvore as $node) {
if($node == $elemento){
return true;
}
}
return false;
}
}
I understand that there must be some errors of OO, and perhaps some incorrect logic too, but I can not think of any way to solve, beyond what I have done so far.
What is your specific question? I saw some problems in your code. One thing that people never understand about O is that you can only get it right with all the very detailed requirements, harvested correctly and already specified everything you should do. Without this anything you do can be wrong because there is a previous mistake. OOP doesn’t make bad projects magically become good.
– Maniero
my doubt is how to implement, correctly, the No class, so that the first piece of code works as expected
– Vitor Couto