Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cassiombc

[Resolvido] Herança

Recommended Posts

Galera , gostaria de saber porque esse método não funfa.

Classe Conta

<?php

class Conta {

   private $numero;
   private $saldo;

   public function __construct() {
       $this->numero = rand(777, 9999);
   }

   public function getNumero() {
       return $this->numero;
   }
   public function getSaldo() {
       return $this->saldo;
   }

   public function creditar($valor) {
       if ($valor < 0) {
           return false;
       }
       $this->saldo = $this->saldo + $valor;
   }

   public function debitar($valor) {
       if ($valor < 0) {
           return false;
       }
       $this->saldo = $this->saldo + $valor;
   }

   public function transferir($valor, Conta $contadest) {
       if ($contadest->numero == 0 || $valor < 0) {
           return false;
       }
       $this->debitar($valor);
       $contadest->creditar($valor);
   }

   public function __toString() {

       return "A conta solicitada de numero: ". $this->numero . " com saldo= ". $this->saldo."<br/>";

   }

}

?>

 

Classe Poupança

<?php

class Poupanca extends Conta{


       public function RenderJuros(){
       $this->saldo  = 333;
   }


}

?>


 

Index

 

<!DOCTYPE html>
<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title></title>
   </head>
   <body>        
       <?php
       include 'Conta.php';
       include 'Poupanca.php';   

       $conta1 =  new Conta();
       $conta1->creditar(100);
       $conta2 = new Conta();
       $conta2->creditar(200);
       $conta1->transferir(50, $conta2);
       $poupa = new Poupanca();
       $poupa->creditar(100);
       $poupa->RenderJuros();

       print $conta1;
       echo"<br/>";
       print $conta2;
       echo"<br/>";
       print $poupa;
       echo"<br/>"; 

       ?>

   </body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o q espcificamente n funciona? a poupanaça?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o problema era a poupança.... lembre q saldo é privado logo a classe poupança n herda esse atributo.

você pode mudar de private para protected.

 

A visibilidade de uma propriedade ou método pode ser definida prefixando a declaração com as palavras-chave: 'public','protected' ou 'private'. Itens declarados como public podem ser acessados por todo mundo. Protected limita o acesso a classes herdadas (e para a classe que define o item). Private limita a visibilidade para apenas a classe que define o item.

 

http://php.net/manual/pt_BR/language.oop5.visibility.php

 

 

 

aqui você so esta sobrescrevendo o valor de saldo e não somando. mude de = para +=

public function RenderJuros(){
       $this->saldo  = 333;
}

 

e esse trecho de codigo aqui? o debitar ta igual o creditar....

public function creditar($valor) {
       if ($valor < 0) {
           return false;
       }

       $this->saldo = $this->saldo + $valor;
   }

   public function debitar($valor) {
       if ($valor < 0) {
           return false;
       }
       $this->saldo = $this->saldo + $valor;
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando pegar o saldo e alterar como metodo RenderJuros().

Mas o shini me informou que ele sendo private não posso acessar o método.

O problema é que eu desejo que o metodo acima citado efetue uma alteração no saldo da conta.

Exemplo

public function RenderJuros()
{
   $this->getSaldo = $this->saldo * 0.05;

}

 

RESOLVIDO(Mas não sei se esta da maneira certa)

 

Galera eu não queria criar o método setSaldo para que o saldo não fosse alterado manualmente e sim somente via credito ou débito, mas como foi a única maneira que encontrei para resolver a solução(não sei se está certo).

 

<?php

class Poupanca extends Conta {

   public function RenderJuros() {

       $saldo = $this->getSaldo() * 0.05;
       $this->setSaldo($saldo);
   }

}
?>



Compartilhar este post


Link para o post
Compartilhar em outros sites

e qual o problema do $saldo ser protected?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera estou com uma outra dúvida no momento.

Gostaria de saber como devo proceder para o seguinte fato:

Uma conta possui os metodos de creditar e debitar, uma conta de cheque especial possui um saldo alem do estabelecido pelo motivo do cheque, gostaria de saber como vou definir o metodo Creditar e Debitar da classe conta, pois eu preciso sobrescrever esses metodos na classe ContaEspecial, pois vou verificar se o saldo da conta é 0 e disponibilizar um valor para o cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver , apenas reescrevo o metodos nas classes em que desejo que ele se comporte de maneira exclusiva daquela classe, no caso é SOBRESCREVER e Não SOBRECARGA.

 

Moderador pode fechar o Tópico com Resolvido.

 

Obrigado aa todos que cooperaram.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e qual o problema do $saldo ser protected?

Se as variáveis da classe Conta deverão ser acessíveis em suas classes filhas, deverão ter escopo protegido (protected).

 

Variáveis privadas são acessíveis somente dentro do escopo da classe que a possui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguém pode me ajudar...

to querendo colocar credito em um usuário!

Ex: o Google Adwords funciona assim, você compra os créditos para criar uma campanha, mas os créditos só são liberados qndo o pagamento é confirmado.

Apos ter confirmado o usuário poderá criar a campanha

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.