Ir para conteúdo
Fórum Script Brasil
  • 0

PHP Orientado a Objeto


Adelcio

Pergunta

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

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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
    }
}

Link para o comentário
Compartilhar em outros sites

  • 0
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...

Link para o comentário
Compartilhar em outros sites

  • 0

Salumão,

No seu post há um erro de sintaxe

public 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!

Link para o comentário
Compartilhar em outros sites

  • 0
Salumão,

No seu post há um erro de sintaxe

public 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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...