Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
tenho um pacote X com 2 classes (Classe A Classe B)
a Classe A extende da Classe B - ate aqui ok
Tennho um pacote Y com 1 classe (Classe C)
que instancia a Classe A do pacote X - ate aqui ok
o problema :
consigo ver os metodos (gets' set's) da classe A e B através de um objeto
criado na classe C porem só consigo setar valores as propriedades
da Classe A mesmo conseguindo visualizar as propriedades de B
pacote X (pacote com classe de entidades- contem apenas propriedades e metodos get's set's)
classe A
classe B
Pacote Y (pacote com classe de negocio)
classe C
Alguém poderia me dar uma dica de como resolver isso.
Desde já obrigado a todos.
Classe A
<?php
require_once("Class.Entidade.Endereco.php");
class Cliente extends Endereco {
private $cliente;
private $tel01;
private $tel02;
private $dt_nascimento;
private $email;
private $sexo;
private $observ;
/*
*
* metodos Set dos atributos
*
*/
public function setCliente($cli){
$this->cliente = $cli;
}
public function setTel01($tel){
$this->tel01 = $tel;
}
public function setTel02($tel2){
$this->tel02 = $tel2;
}
public function setDtNascimento($dt){
$this->dt_nascimento = $dt;
}
public function setEmail($email){
$this->email = $email;
}
public function setSexo($sexo){
$this->sexo = $sexo;
}
public function setObserv($obs){
$this->observ = $obs;
}
/**
* metodos Get dos atributos
*/
public function getCliente(){
return $this->cliente;
}
public function getTel01(){
return $this->tel01;
}
public function getTel02(){
return $this->tel02;
}
public function getDtNascimento(){
return $this->dt_nascimento;
}
public function getEmail(){
return $this->email;
}
public function getSexo(){
return $this->sexo;
}
public function getObserv(){
return $this->observ;
}
}
?>
Classe B
<?php
class Endereco {
private $endereco;
private $complemento;
private $numero;
private $cep;
private $bairro;
/*
*
* metodos Set dos atributos
*
*/
public function setEndereco($end){
$this->endereco = $end;
}
public function setComplemento($compl){
$this->complemento = $compl;
}
public function setNumero($num){
$this->numero = $num;
}
public function setCep($cep){
$this->cep = $cep;
}
public function setBairro($bairro){
$this->bairro = $bairro;
}
/**
* metodos Get dos atributos
*/
public function getEndereco(){
return $this->endereco;
}
public function getComplemento(){
return $this->complemento;
}
public function getNumero(){
return $this->numero;
}
public function getCep(){
return $this->cep;
}
public function getBairro(){
return $this->bairro;
}
}
?>
Classe C
<?php
require_once("../../Conect.php");
require_once("../entidades/Class.Entidade.Cliente.php");
require_once("../controle/Class.Controler.Generico.php");
$objConexao = new Conect();
$obPdo = $objConexao->instance();
if(isset($_POST['enviar'])){
$cliente = filter_input(INPUT_POST,"cliente",FILTER_SANITIZE_MAGIC_QUOTES);
$sexo = filter_input(INPUT_POST,"sexo",FILTER_SANITIZE_MAGIC_QUOTES);
$telefone01 = filter_input(INPUT_POST,"telefone01",FILTER_SANITIZE_MAGIC_QUOTES);
$telefone02 = filter_input(INPUT_POST,"telefone02",FILTER_SANITIZE_MAGIC_QUOTES);
$dtnascimento = filter_input(INPUT_POST,"dtnascimento",FILTER_SANITIZE_MAGIC_QUOTES);
$email = filter_input(INPUT_POST,"email",FILTER_SANITIZE_MAGIC_QUOTES);
$bairro = filter_input(INPUT_POST,"bairro",FILTER_SANITIZE_MAGIC_QUOTES);
$endereco = filter_input(INPUT_POST,"endereco",FILTER_SANITIZE_MAGIC_QUOTES);
$numero = filter_input(INPUT_POST,"numero",FILTER_SANITIZE_MAGIC_QUOTES);
$cidade = filter_input(INPUT_POST,"cidade",FILTER_SANITIZE_MAGIC_QUOTES);
$complemento = filter_input(INPUT_POST,"complemento",FILTER_SANITIZE_MAGIC_QUOTES);
$cep = filter_input(INPUT_POST,"cep",FILTER_SANITIZE_MAGIC_QUOTES);
$observ = filter_input(INPUT_POST,"obs",FILTER_SANITIZE_MAGIC_QUOTES);
$objCliente = new Cliente();
$objCliente->setCliente($cliente);
$objCliente->setDtNascimento($dtnascimento);
$objCliente->setEmail($email);
$objCliente->setObserv($observ);
$objCliente->setSexo($sexo);
$objCliente->setTel01($telefone01);
$objCliente->setTel02($telefone02);
$objCliente->setBairro($bairro);
$objCliente->setCep($cep);
$objCliente->setComplemento($complemento);
$objCliente->setEndereco($endereco);
$objCliente->setNumero($numero);
$objControle = new Controler($objCliente);
}
else{
?>Porque ao normalizar meu BD endereço se tornou uma tabela com dados relacionais a outras tabelas.
ok, mas ai é um decorator e não uma herança.
Um Cliente não é um Endereço, logo não é herança.
Um cliente tem um (ou mais) endereço(s) e, apesar de programaticamente falando, não ser possível, ele pode existir sem um ou mais endereço(s).
Você teria mais um setter que recebe um objeto endereço e insere ele numa propriedade da classe Cliente, fazendo dela uma Collection.
O getter por sua vez retornaria um array ou um objeto iterável.
O básico da OO: os tipos de relacionamentos.
Herança: é um
Traits: comporta-se como um
Associação/Composição/Agregação: tem um
Sendo que existe diferença entre Associação, Composição e Agregação:
Associação:
mundo real: um controlador de módulos pode possuir vários módulos
Composição:
Agregação:
mundo real: um DAO de um usuário tem um banco de dados
:seta: Lembrando-se de que herança e traits são apenas recursos adicionais e não substituem o "motor" da orientação a objetos, que é o relacionamento horizontal entre objetos.
Amigos boa noite,
Alguém tem algum exemplo de implementação que pode-se postar, pois estou me enrolando com as coisas e acho que isso não é um bicho de 7 cabeças apenas eu estou complicando.
Leia de novo o que eu disse no post #5
Amigo Bruno Augusto boa noite.
fiz o que falou.
só que o fluxo de execução que estou criando é assim:
instancio objeto com dados capturados da view.
chamo meu controlador passando esse objeto.
meu controlador identifica o tipo do objeto e chama a dao correspondente a ele e passa esse objeto.
na dao trabalho esse objeto.
só que quando vou fazer uma verificação em um determinado atributo que deveria estar sendo visto como atributo do objeto cliente
o sistema apresenta essa propriedade com inexistente e lança uma exceção.
View
<?php
require_once("../../Conect.php");
require_once("../entidades/Class.Entidade.Cliente.php");
require_once("../entidades/Class.Entidade.Endereco.php");
require_once("../controle/Class.Controler.Generico.php");
$objConexao = new Conect();
$obPdo = $objConexao->instance();
if(isset($_POST['enviar'])){
$cliente = filter_input(INPUT_POST,"cliente",FILTER_SANITIZE_MAGIC_QUOTES);
$sexo = filter_input(INPUT_POST,"sexo",FILTER_SANITIZE_MAGIC_QUOTES);
$telefone01 = filter_input(INPUT_POST,"telefone01",FILTER_SANITIZE_MAGIC_QUOTES);
$telefone02 = filter_input(INPUT_POST,"telefone02",FILTER_SANITIZE_MAGIC_QUOTES);
$dtnascimento = filter_input(INPUT_POST,"dtnascimento",FILTER_SANITIZE_MAGIC_QUOTES);
$email = filter_input(INPUT_POST,"email",FILTER_SANITIZE_MAGIC_QUOTES);
$bairro = filter_input(INPUT_POST,"bairro",FILTER_SANITIZE_MAGIC_QUOTES);
$endereco = filter_input(INPUT_POST,"endereco",FILTER_SANITIZE_MAGIC_QUOTES);
$numero = filter_input(INPUT_POST,"numero",FILTER_SANITIZE_MAGIC_QUOTES);
$cidade = filter_input(INPUT_POST,"cidade",FILTER_SANITIZE_MAGIC_QUOTES);
$complemento = filter_input(INPUT_POST,"complemento",FILTER_SANITIZE_MAGIC_QUOTES);
$cep = filter_input(INPUT_POST,"cep",FILTER_SANITIZE_MAGIC_QUOTES);
$observ = filter_input(INPUT_POST,"obs",FILTER_SANITIZE_MAGIC_QUOTES);
$objCliente = new Cliente();
$objEndereco = new Endereco();
$objCliente->setCliente($cliente);
$objCliente->setDtNascimento($dtnascimento);
$objCliente->setEmail($email);
$objCliente->setObserv($observ);
$objCliente->setSexo($sexo);
$objCliente->setTel01($telefone01);
$objCliente->setTel02($telefone02);
$objEndereco->setNumero($numero);
$objEndereco->setEndereco($endereco);
$objEndereco->setComplemento($complemento);
$objEndereco->setCep($cep);
$objEndereco->setBairro($bairro);
$objCliente->SetEnd($objEndereco);
$objControle = new Controler($objCliente);
}
else{
?>
Entidade Cliente
<?php
require_once("Class.Entidade.Endereco.php");
class Cliente extends Endereco{
private $cliente;
private $tel01;
private $tel02;
private $dt_nascimento;
private $email;
private $sexo;
private $observ;
private $end;
/*
*
* metodos Set dos atributos
*
*/
public function __construct(){
parent::__construct();
}
public function setCliente($cli){
$this->cliente = $cli;
}
public function setTel01($tel){
$this->tel01 = $tel;
}
public function setTel02($tel2){
$this->tel02 = $tel2;
}
public function setDtNascimento($dt){
$this->dt_nascimento = $dt;
}
public function setEmail($email){
$this->email = $email;
}
public function setSexo($sexo){
$this->sexo = $sexo;
}
public function setObserv($obs){
$this->observ = $obs;
}
public function SetEnd(Endereco $ender){
$this->end = $ender;
}
/**
* metodos Get dos atributos
*/
public function getCliente(){
return $this->cliente;
}
public function getTel01(){
return $this->tel01;
}
public function getTel02(){
return $this->tel02;
}
public function getDtNascimento(){
return $this->dt_nascimento;
}
public function getEmail(){
return $this->email;
}
public function getSexo(){
return $this->sexo;
}
public function getObserv(){
return $this->observ;
}
}
?>
Entidade Endereço
<?php
class Endereco {
private $endereco;
private $complemento;
private $numero;
private $cep;
private $bairro;
/*
*
* metodos Set dos atributos
*
*/
public function __construct(){
}
public function setEndereco($end){
$this->endereco = $end;
}
public function setComplemento($compl){
$this->complemento = $compl;
}
public function setNumero($num){
$this->numero = $num;
}
public function setCep($cep){
$this->cep = $cep;
}
public function setBairro($bairro){
$this->bairro = $bairro;
}
/**
* metodos Get dos atributos
*/
public function getEndereco(){
return $this->endereco;
}
public function getComplemento(){
return $this->complemento;
}
public function getNumero(){
return $this->numero;
}
public function getCep(){
return $this->cep;
}
public function getBairro(){
return $this->bairro;
}
}
?>
Controler
<?php
require_once("../../Conect.php");
require_once("../persistencia/class.persistencia.cliente.php");
class Controler{
private $objConexao;
private $obPdo;
public function __construct($objeto){
$this->objConexao = new Conect();
$this->obPdo = $this->objConexao->instance();
$this->rota($objeto);
}
private function rota($objeto){
$classeDoObj = get_class($objeto);
switch($classeDoObj){
case "Cliente" :
$objPersistCliente = new ClienteDao($objeto);
break;
default :
//echo "nao";
break;
}
}
}
?>
Persistência Cliente
<?php
require_once("../../Conect.php");
class ClienteDao{
private $objPdo;
public function __construct(Cliente $objeto){
$objCon = new Conect();
$this->objPdo = $objCon->instance();
$this->validarDadosCliente($objeto);
}
private function validarDadosCliente(Cliente $cliente){
if(!empty($cliente->) && !empty($cliente->cliente)){
return TRUE;
}else{
//throw new Exception("Dados Incorretos.");
print_r($cliente);
}
}
}
?>Bom, eu tô com o pé na rua pro serviço, então dei uma olhada por cima.
Como você disse que lança uma Exception e eu não via nada que fizesse isso automaticamente procurei por um throw no seu código.
Olha isso:
[if(!empty($cliente->) && !empty($cliente->cliente))
Cadê a propriedade ou método a que você se refere com o primeiro operador de objeto?
Foi só um erro de digitação.
if(!empty($cliente->endereco) && !empty($cliente->cliente)){
return TRUE;
}else{
//throw new Exception("Dados Incorretos.");
print_r($cliente);
}
sobre a exceção eu comentei a linha e lancei para a tela o conteúdo de $cliente.
Cliente Object ( [cliente:Cliente:private] => asdfasd [tel01:Cliente:private] => sdfasd [tel02:Cliente:private] => 8585087606 [dt_nascimento:Cliente:private] => 01/01/2013 [email:Cliente:private] => 234523453@gmail.com [sexo:Cliente:private] => F [observ:Cliente:private] => sfsdfgsdfgsdf [end:Cliente:private] => Endereco Object ( [endereco:Endereco:private] => asdfasdfas [complemento:Endereco:private] => próximo ao colégio Otávio de Farias [numero:Endereco:private] => 356345634563456 [cep:Endereco:private] => 23.452-345 [bairro:Endereco:private] => 3563456sdfgsdfgs ) [endereco:Endereco:private] => [complemento:Endereco:private] => [numero:Endereco:private] => [cep:Endereco:private] => [bairro:Endereco:private] => )
como você pode ver o cliente tem dentro dele um objeto endereço, porem não consigo validar os dados do endereço na classe de persistência.
ok, mas ai é um decorator e não uma herança.
Amigo bom dia.
Como eu implementaria o decorator nesse caso. pois to tentando implementar isso tbm e não estou conseguindo.
desde já obrigado.
Resolvi galera.
Obrigado a ajuda de todos.
$objCliente = new Cliente(new Endereco());
$objCliente->setDtNascimento($dtnascimento);
$objCliente->setCliente($cliente);
$objCliente->setEmail($email);
$objCliente->setObserv($observ);
$objCliente->setSexo($sexo);
$objCliente->setTel01($telefone01);
$objCliente->setTel02($telefone02);
$objCliente->setNumero($numero);
$objCliente->setEndereco($endereco);
$objCliente->setComplemento($complemento);
$objCliente->setCep($cep);
$objCliente->setBairro($bairro);
não sei se foi a melhor solução mais consegui resolver.
Porque Cliente extends Endereco ?