2
respostas

[Dúvida] Fatal error: Uncaught Error: Class

Boa tarde, No meu prompt de comando estou conseguindo rodar o teste-saque.php quando está configurado para a classe Conta. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAqui está o arquivo teste-saque.php configurado para a classe Conta:

<?php 
require_once 'autoload.php';

//use Alura\Banco\Modelo\Conta\ContaPoupanca;
use Alura\Banco\Modelo\Conta\Conta;
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Cpf;
use Alura\Banco\Modelo\Endereco;


$conta=new Conta(
            new Titular(
                new Cpf('123.456.789-10'),
                'Fulano de tal',
                new Endereco('cei','QNQ','ave branca','13')
                        ));
$conta->depositar(500);
$conta->sacar(100);
echo $conta->recuperarSaldo();

?>

mas quando altero para a classe** ContaPoupança** ele dá o seguinte erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Aqui está o arquivo teste-saque.php configurado para a classe ContaPoupanca, que gera o erro pintado no cmd acima:

<?php 
require_once 'autoload.php';

use Alura\Banco\Modelo\Conta\ContaPoupanca;
//use Alura\Banco\Modelo\Conta\Conta;
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Cpf;
use Alura\Banco\Modelo\Endereco;


$conta=new ContaPoupanca(
            new Titular(
                new Cpf('123.456.789-10'),
                'Fulano de tal',
                new Endereco('cei','QNQ','ave branca','13')
                        ));
$conta->depositar(500);
$conta->sacar(100);
echo $conta->recuperarSaldo();

?>

Se eu habilito as duas classes ainda assim não dá. Eu já não sei mais onde estou errando, se alguém puder ajudar... Classe ContaPoupanca

<?php 
namespace Alura\Banco\Modelo\Conta;

class ContaPoupanca extends Conta{

    protected function percentualTarifa():float
    {
        return 0.03;
    }
}


?>

Classe Conta:

<?php 
//definição de conta e ninguém consegue criar uma conta se não for por este arquivo (forma=classe)
// instância e objeto são sinônimos
// classe=forma, novo objeto/instância=bolo, variável=prateleira
// nome das classes=substantivo, nome das funções=verbos
//C:\xampp\htdocs\alura
namespace Alura\Banco\Modelo\Conta;

use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Cpf;

class Conta
{
    
    private $titular;
    private float $saldo;
    private static $numeroDeContas = 0;


    public function __construct(Titular $titular)
    {
         
        echo "Criando uma nova conta. \n" ; 
        $this->titular = $titular;  
        $this->saldo = 0;
        self::$numeroDeContas++;
    }
    
    public function __destruct()
    {
        if (self::$numeroDeContas >2){
            echo "há mais de uma conta ativa";
        }
    }
    
     public function sacar(float $valorASacar) 
    {   
        $tarifaSaque= $valorASacar * $this->percentualTarifa();
               
        $valorSaque= $valorASacar + $tarifaSaque;
        
        if ($valorSaque> $this->saldo){
            echo "Saldo indisponível.";
            return;
        }
        $this->saldo -= $valorSaque;        

    }

    public function depositar(float $valorADepositar): void
    {
        if ($valorADepositar <= 0){
            echo "Valor precisa ser maior que zero.";
            return;
        } 
        
        $this->saldo += $valorADepositar;       

    }

    public function transferir(float $valorATransferir, Conta $contaDestino): void
    {
        if($valorATransferir > $this->saldo){
            echo "Saldo indisponível.";
            return;
        }
        
        $this->sacar($valorATransferir);
        $contaDestino->depositar($valorATransferir);
        
    }

    public function recuperarSaldo():float
    {
        return $this->saldo;
    }      
  
    public static function recuperaNumeroDeContas(): int
    {
        return self::$numeroDeContas;
    }

    public function recuperaCpfTitular():Cpf
    {
        return $this->titular->recuperaCpf();
    }   
    
    public function recuperaNomeTitular():string 
    {
        return $this->titular->recuperaNome();
    }

    protected function percentualTarifa():float
    {
        return 0.05;
    }


}

?>

Desta forma, não consigo ver a herança funcionando. Estou usando o Visual Studio Code Versão 1.83.1 (user setup)

2 respostas

Aqui segue o print do VSCode. Eu vi um erro parecido neste mesmo fórum desta aula, mas no do colega não existia o arquivo ContaPoupanca....... ih, acabei de ver o erro, criei o arquivo com ç... qpq... que estrago rss mas como eu eu já tava digitando vou deixar aqui como registro

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oii, Nelcilene!

Se você descomentar a linha use Alura\Banco\Modelo\Conta\Conta; qual erro acontece?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software