Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Class 'Alura\Banco\Modelo\Endereco' not found

Bom dia Pessoal, Estou com erro e não consegui identificar onde, ja re-assisti as aulas algumas vezes pra tentar entender onde está o problema mas não identifiquei

Quando tento executar pelo CMD, tenho esse erro:

PHP Fatal error: Uncaught Error: Class 'Alura\Banco\Modelo\Endereco' not found in C:\Users\natal\Documents\Alura\PHP\Curso OO\banco.php:10 Stack trace: #0 {main} thrown in C:\Users\natal\Documents\Alura\PHP\Curso OO\banco.php on line 10

Banco.php

<?php

require_once 'autoload.php';

use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Endereco;
use Alura\Banco\Modelo\CPF;
use Alura\Banco\Modelo\Conta\Conta;

$endereco = new Endereco('Santo Andre','Vila de Teste','Av Dom Pedro','123');

$Natali = new Titular( new Cpf('123.456.789-10'), 'Natali Almeida', $endereco );
$primeiraConta = new Conta( $Natali );

$primeiraConta->depositar(500);
$primeiraConta->sacar(300);

echo $primeiraConta->recuperaNomeTitular() . PHP_EOL;
echo $primeiraConta->recuperaCpfTitular() . PHP_EOL;
echo $primeiraConta->recuperaSaldo() . PHP_EOL;

$Rod = new Titular(new Cpf('698.549.548-10'), 'Rodolfo Santos', $endereco );
$segundaConta = new Conta( $Rod );
var_dump($segundaConta);

// A classe 'destruct' irá *ver* que esse objeto está
// sem ponteiro e irá retirá-lo da memória
// new Conta(new Titular(new Cpf('123'), 'Teste de Conta'));

$endereco = new Endereco('São Paulo','Piqueri','Rua de Teste','456');
$outra = new Conta(new Titular( new Cpf('123'), 'Teste de Conta', $endereco ));

echo Conta::recuperaNumeroDeContas();

E aqui o Endereco.php:

<?php

namespace Alura\Banco\Modelo;

class Endereco
{
    private $cidade;
    private $bairro;
    private $rua;
    private $numero;

    public function __construct(string $cidade, string $bairro, string $rua, string $numero)
    {
        $this->cidade = $cidade;
        $this->bairro = $bairro;
        $this->rua = $rua;
        $this->numero = $numero;
    }

    public function recuperaCidade(): string
    {
        return $this->cidade;
    }

    public function recuperaBairro(): string
    {
        return $this->bairro;
    }

    public function recuperaRua(): string
    {
        return $this->rua;
    }

    public function recuperaNumero(): string
    {
        return $this->numero;
    }
}

Desde já agradeço a atenção! (;

2 respostas
solução!

Oi Natali, como vai?

O erro está acontecendo por conta da instanciação da classe Conta que é uma classe abstract e que por conta disso não pode ser instanciada, as classes abstratas servem apenas de modelo para outras classes, neste caso, a classe Conta serve de modelo para as classes ContaCorrente e ContaPoupança.

Para corrigir o erro é necessário apenas trocar a instanciação da classe Conta pela instanciação da classe ContaCorrente ou da ContaPoupança. O código correto do arquivo banco.php ficará assim:

<?php

require_once 'autoload.php';

use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Endereco;
use Alura\Banco\Modelo\CPF;
use Alura\Banco\Modelo\Conta\Conta;
use Alura\Banco\Modelo\Conta\ContaCorrente;

$endereco = new Endereco('Petrópolis', 'um bairro', 'minha rua', '71B');
$vinicius = new Titular(new CPF('123.456.789-10'), 'Vinicius Dias', $endereco);
$primeiraConta = new ContaCorrente($vinicius);
$primeiraConta->deposita(500);
$primeiraConta->saca(300); // isso é ok

echo $primeiraConta->recuperaNomeTitular() . PHP_EOL;
echo $primeiraConta->recuperaCpfTitular() . PHP_EOL;
echo $primeiraConta->recuperaSaldo() . PHP_EOL;

$patricia = new Titular(new CPF('698.549.548-10'), 'Patricia', $endereco);
$segundaConta = new ContaCorrente($patricia);
var_dump($segundaConta);

$outroEndereco = new Endereco('A', 'b', 'c', '1D');
$outra = new ContaCorrente(new Titular(new CPF('123.654.789-01'), 'Abcdefg', $outroEndereco));
unset($segundaConta);
echo Conta::recuperaNumeroDeContas();

Espero que te ajude.

Caso tenha quaisquer comentários ou dúvidas a respeito de alguma aula ou desafio, pode postar aqui no fórum que vamos te responder!

Abraços e bons estudos!

Oi Murillo, boa tarde! Tudo bem?

Entendi, eu parei no final da aula 2, a aula 3 vai ter as classes de conta corrente e poupança

Como no exemplo do professor no vídeo deu certo na hora do teste, achei que eu tinha feito algo errado e por isso não estava rodando

Muito obrigada pelo retorno (;

Att