Adelcio Postado Fevereiro 21, 2009 Denunciar Share Postado Fevereiro 21, 2009 CARROS AMIGOS, ESTOU COM UM PROBLEMA DE POLIMORFISMO.VEJA O CODIGO E A SAIDA NO NAVEGADOR.<?phpclass ChequeComum{ private $valor; public function setValor($valor ){ $this->valor = $valor; } public function getValor(){ return $this->valor; } public function calculaJuros(){ return $this->valor * 1.25; // soma 25% em cima do valor }}class ChequeEspecial extends ChequeComum{ public function calculaJuros() { return $this->valor * 1.10; // soma 10% em cima do valor }}$chequeComum = new ChequeComum();$chequeEspecial = new ChequeEspecial();$chequeComum->setValor(1000);$chequeEspecial->setValor(2000);echo "<br> Cheque Comum ".$chequeComum->getValor();echo "<br> Cheque Especial ".$chequeEspecial->getValor();echo "<br> Juro para cheque comum ".$chequeComum->CalculaJuros();echo "<br> Juro para cheque especial ".$chequeEspecial->CalculaJuros();///////////////SAIDA NO NAVEGADOR///////////////Cheque Comum 1000Cheque Especial 2000Juro para cheque comum 1250Juro para cheque especial 0 //AQUI DEVERIA APARECER 2200 E não 0//PORTANTO O POLIMORFISMO não ESTA FUNCIONANDO CORRETAMENTE.//EM C++ EU TERIA QUE USAR UMA PALAVRA RESERVADA "VIRTUAL" não SEI SE NO PHP É O MESMO.AGUARDO RESPOSTAS OBRIGADO Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Salumão Barbosa da Costa Postado Setembro 29, 2011 Denunciar Share Postado Setembro 29, 2011 Seu Problema é muito Simples meu querido. Basta você alterar [$this->valor * 1.10] na classe ChequeEspecial para [getValor() * 1.10] Pronto. orientacaooo.php<?php class ChequeComum{ private $valor; public function setValor($valor ){ $this->valor = $valor; } public function getValor(){ return $this->valor; } public function calculaJuros(){ return $this->valor * 1.25; // soma 25% em cima do valor } } ?> orientacaoo2.php <?php require_once("orientacaooo.php"); class ChequeEspecial extends ChequeComum { public function calculaJuros() { return getValor() * 1.10; // Usa-se getValor() ao invés de $this->valor*1.10 } } $chequeComum = new ChequeComum(); $chequeEspecial = new ChequeEspecial(); $chequeComum->setValor(1000); $chequeEspecial->setValor(2000); echo "<br> Cheque Comum ".$chequeComum->getValor(); echo "<br> Cheque Especial ".$chequeEspecial->getValor(); echo "<br> Juro para cheque comum ".$chequeComum->CalculaJuros(); echo "<br> Juro para cheque especial ".$chequeEspecial->CalculaJuros(); ?>Qualquer Dúvida, fique a vontade pra postar.PS: É minha Primeira Resposta. Me Cadastrei hoje no site. Até+ Adelcio. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Setembro 29, 2011 Denunciar Share Postado Setembro 29, 2011 Você também pode trocar o modificador de acesseso da propiedade $valor;De:private $valor; Para: protected $valor; Mas acredito não ser uma boa prática, pois você está fazendo o encapsulamento com os métodos setValor e getValor. Então aconselho a utilizar da forma citada acima: class ChequeComum { private $valor; public function setValor($valor) { $this->valor = $valor; } public function getValor() { return $this->valor; } public function calculaJuros() { return $this->getValor() * 1.25; // soma 25% em cima do valor } } class ChequeEspecial extends ChequeComum { public function calculaJuros() { return $this->getValor() * 1.10; // soma 10% em cima do valor } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Salumão Barbosa da Costa Postado Setembro 29, 2011 Denunciar Share Postado Setembro 29, 2011 Você também pode trocar o modificador de acesseso da propiedade $valor;De:private $valor; Para: protected $valor; Mas acredito não ser uma boa prática, pois você está fazendo o encapsulamento com os métodos setValor e getValor. Então aconselho a utilizar da forma citada acima: class ChequeComum { private $valor; public function setValor($valor) { $this->valor = $valor; } public function getValor() { return $this->valor; } public function calculaJuros() { return $this->getValor() * 1.25; // soma 25% em cima do valor } } class ChequeEspecial extends ChequeComum { public function calculaJuros() { return $this->getValor() * 1.10; // soma 10% em cima do valor } }Grande Romero Dias. Na verdade, na classe ChequeComum eu deixei da forma como estava [Não quis malinar muito no código do Amigo]. De fato, usar encapsulamento reforça o conceito de OO. Eu simplesmente resolvi o problema do Camarada Adelcio.Não quis levantar a Questão de Boa Prática... Mas, Boa Observação.Valeu... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Setembro 30, 2011 Denunciar Share Postado Setembro 30, 2011 Salumão,No seu post há um erro de sintaxepublic function calculaJuros() { return getValor() * 1.10; // Usa-se getValor() ao invés de $this->valor*1.10 }você esqueceu do $this->Então, aproveitando para acertar o erro, levantei a questão de boas práticas.Abraço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Salumão Barbosa da Costa Postado Setembro 30, 2011 Denunciar Share Postado Setembro 30, 2011 Salumão,No seu post há um erro de sintaxepublic function calculaJuros() { return getValor() * 1.10; // Usa-se getValor() ao invés de $this->valor*1.10 }você esqueceu do $this->Então, aproveitando para acertar o erro, levantei a questão de boas práticas.Abraço!Verdade, boas observações. Eu criei um tópico Sobre Poo em PHP: http://scriptbrasil.com.br/forum/index.php?showtopic=164186 Se poder acessar e deixar alguma crítica... Nele não existe esse erro rsrs. De fato eu esquecii do $this->bláblá. Quando eu estava respondendo esse Post ao mesmo tempo estava fazendo um Trabalho sobre Árvore Binária de Busca - ABB em Java. Daí não prestei muita atenção. Valeu Pela *OBS. Abrass Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Adelcio
CARROS AMIGOS, ESTOU COM UM PROBLEMA DE POLIMORFISMO.
VEJA O CODIGO E A SAIDA NO NAVEGADOR.
<?php
class ChequeComum{
private $valor;
public function setValor($valor ){
$this->valor = $valor;
}
public function getValor(){
return $this->valor;
}
public function calculaJuros(){
return $this->valor * 1.25; // soma 25% em cima do valor
}
}
class ChequeEspecial extends ChequeComum
{
public function calculaJuros()
{
return $this->valor * 1.10; // soma 10% em cima do valor
}
}
$chequeComum = new ChequeComum();
$chequeEspecial = new ChequeEspecial();
$chequeComum->setValor(1000);
$chequeEspecial->setValor(2000);
echo "<br> Cheque Comum ".$chequeComum->getValor();
echo "<br> Cheque Especial ".$chequeEspecial->getValor();
echo "<br> Juro para cheque comum ".$chequeComum->CalculaJuros();
echo "<br> Juro para cheque especial ".$chequeEspecial->CalculaJuros();
///////////////SAIDA NO NAVEGADOR///////////////
Cheque Comum 1000
Cheque Especial 2000
Juro para cheque comum 1250
Juro para cheque especial 0 //AQUI DEVERIA APARECER 2200 E não 0
//PORTANTO O POLIMORFISMO não ESTA FUNCIONANDO CORRETAMENTE.
//EM C++ EU TERIA QUE USAR UMA PALAVRA RESERVADA "VIRTUAL" não SEI SE NO PHP É O MESMO.
AGUARDO RESPOSTAS OBRIGADO
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.