Array
(
)

PHP Orientado a Ojetos - PHP OO

PHP
Djeico
   - 27 abr 2016

Bom dia!
Voltei a estudar sobre PHP OO e agora me surgiu uma dúvida cruel. ("cruel é bom", já dizia Maze Runner, uhasuhashauhs)
Bom, a situação é a seguinte:
Possuo duas classes:
usuario.class.php
#Código
<?php
class Usuario {

private $usuario_id;
private $usuario_email;
public function __construct(){

}

public function _setUsuario_Id($valor = NULL){
$this->usuario_id = $valor;
}
public function _getUsuario_Id(){
return $this->usuario_id;
}
public function _setUsuario_Email($valor){
$this->usuario_Email = $valor;
}
public function _getUsuarioId(){
return $this->usuario_Email;
}
public function __destruct(){

}

}

?>


chamado.class.php
#Código
<?php
require_once('usuario.class.php');

class Chamado {

private $chamado_id;
private $chamado_titulo;
private $chamado_data_criacao;
private $chamado_data_conclusao;
private $autor; //É um Usuario
private $responsavel; //É um Usuario
private $participantes; //É um Usuario

public function __construct(){
$usuario = new Usuario();
$this-participantes = [];
}

public function _setChamado_Id($valor = NULL){
$this->chamado_id = $valor;
}
public function _getChamado_Id(){
return $this->chamado_id;
}

public function _setChamado_Titulo($valor){
$this->chamado_titulo = $valor;
}
public function _getChamado_Titulo(){
return $this->chamado_titulo;
}

public function _setChamado_Data_Criacao($valor){
$this->chamado_data_criacao = $valor;
}
public function _getChamado_Data_Criacao(){
return $this->chamado_data_criacao;
}

public function _setChamado_Data_Conclusao($valor){
$this->chamado_data_conclusao = $valor;
}
public function _getChamado_Data_Conclusao(){
return $this->chamado_data_conclusao;
}
/** A dúvida é sobre como eu devo fazer para "ligar" um usuário ao autor, ao responsável e aos participantes **/
public function _addAutor($Obj){

$this->autor = $Obj;
}
public function _listAutor(){
return $this->responsavel;
}
public function _addResponsavel($Obj){
$this->responsavel = $Obj;
}

public function _listResponsavel(){
return $this->autor;
}
public function _addResponsavel($Obj){
$this->responsavel = $Obj;
}

public function _addParticipantes($Obj){
$this->participantes = $Obj;
}
public function _listParticipantes(){
return $this->participantes;
}

public function __destruct(){

}

}

?>

Minha dúvida são as seguintes:
1. Entendo que "Usuario" não pode ser uma extensão de "Chamado", pois um chamado possui um usuário. (ele não é um tipo de usuário). É correto afirmar isso?;
2. Tenho dúvida sobre como "adicionar" os atributos que são objetos da outra classe (Usuario). Entendo que preciso de classes para fazer esse intermédio, mas gostaria de entender a essência disso.
Por exemplo:
Para adicionar o meu responsavel eu faria assim?:
#Código
/** Através de uma classe auxiliar, monto uma lista de usuários para ser escolhido um(objeto).
Então a pessoa que está abrindo o chamado escolhe o usuário desejado, por exemplo(id,email): $Obj [12, mariazinha@email.com] ***/
public function _addResponsavel($Obj){
$this->responsavel = $Obj;
}


Nesse momento eu tenho um objeto Responsavel que é do tipo Usuario. Para persistir no banco, eu vou utilizar apenas o $Obj->_getUsuario_Id();
E da mesma forma eu faria com o restante dos objetos do tipo Usuario.
Está certo (em termos de padrão) fazer dessa forma? Imagino que isso vá funcionar, mas minha preocupação é com a qualidade do código.
Lembrando que sei que existem muitas outras etapas antes de persistir no banco, mas eu preciso primeiro entender como montar meus objetos.
Eu li diversos tutoriais e explicações sobre orientação a objetos com PHP na internet e confesso que fiquei impressionado com a quantidade de "coisas" que são ensinadas.
Estou iniciando na programação e gostaria da ajuda do fórum para começar da forma correta.
Muito obrigado mais uma vez! (e desculpa se o código ficar todo numa única linha. Juro que tentei deixar ele indentado, mas não descobri como.)