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.)