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

Atividade 5 aula 2 - Erro ao encontrar a classe

Boa tarde pessoal!

Gostaria de uma ajuda, meu código está dando o seguinte erro: Fatal error: Uncaught Error: Class 'Cursos_alura\POO\Modelo\Conta\Titular' not found in C:\wamp64\www\cursos_alura\php\avancando_oo\index.php on line 11 Error: Class 'Cursos_alura\POO\Modelo\Conta\Titular' not found in C:\wamp64\www\cursos_alura\php\avancando_oo\index.php on line 11

Arquivo index.php

require_once 'autoload.php';

use Cursos_alura\POO\Modelo\Conta;
use Cursos_alura\POO\Modelo\Conta\Titular;
use Cursos_alura\POO\Modelo\CPF;


$guilherme = new Titular(new CPF('439.904.648-17'), 'Guilherme Brandão');
$primeria_conta = new Conta($guilherme);

$satialis = new Titular(new CPF('109.876.543-21'), 'Satialis Anjo');
$segunda_conta = new Conta($satialis);

echo '<br>'. Conta::numero_contas() . ' Contas registradas';

var_dump($primeria_conta, $segunda_conta);

Arquivo autoload

spl_autoload_register(function(string $nome_completo_classe){

    $caminho_arquivo = str_replace('Cursos_alura\\POO', 'src', $nome_completo_classe);
    $caminho_arquivo = str_replace('\\', DIRECTORY_SEPARATOR, $caminho_arquivo);
    $caminho_arquivo .= '.php';

    if (file_exists($caminho_arquivo)) {
        require_once $caminho_arquivo;
    }
});

Arquivo Titular

namespace Cursos_alura\POO\Model\Conta;

use Curso_alura\POO\Modelo\CPF;


class Titular extends CPF
{
    private $cpf;
    private $nome;

    /************ Métodos públicos ************/

    public function __construct(CPF $cpf, string $nome)
    {
        $this->cpf = $cpf;
        $this->validaNome($nome);
        $this->nome = $nome;
    }

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

    /************ Métodos privados ************/

    private function validaNome($nome_titular)
    {
        if (strlen($nome_titular) < 5) {
            echo 'Nome inválido. O nome precisa conter no mínimo 5 caracteres'; 
            exit();
        }
    }
}

Arquivo Conta

namespace Cursos_alura\POO\Model\Conta;

class Conta
{
    /************ Atributos ************/

    private $nome_titular;
    private $saldo;
    private static $numero_contas = 0;

    /************ Métodos públicos ************/

    //Contruct
    public function __construct(Titular $nome_titular)
    {
        $this->nome_titular = $nome_titular;  
        $this->saldo = 0;            
        self::$numero_contas ++;
    }

    //Desctruct (Remove da memoria quando a instância deixa de existir na memória)
    public function __destruct()
    {
        self::$numero_contas --;   
    }

    public function sacar(float $valor_sacar)
    {
        if ($valor_sacar > $this->saldo) {
            echo 'Saque não autorizado! <br>';
            echo 'Valor do saque é maior que o saldo disponível!';

            return;
        }

        $this->saldo -= $valor_sacar;
        // echo '<br><b>'.$this->nome_titular.'</b><br>' .'Seu saldo autal é de R$' . $this->saldo;

    }

    public function depositar(float $valor_depositar):void
    {
        if ($valor_depositar < 0) {
            echo 'Depósito não autorizado! <br>';
            echo 'Valor do depósito é menor que 0. Deposite um valor válido!';

            return;
        } 

        $this->saldo += $valor_depositar;
        // echo '<br><b>'.$this->nome_titular.'</b><br>' .'Seu saldo autal é de R$' . $this->saldo;

    }

    public function transferir(float $valor_transferir, $conta_tranferir):void
    {
        if ($valor_transferir > $this->saldo) {
            echo 'Transferência não autorizada! <br>';
            echo 'Valor da transferência é maior que o saldo disponível!';

            return;
        }

        $this->sacar($valor_transferir);
        $conta_tranferir->depositar($valor_transferir);

    }

    /************ Métodos estáticos ************/

    public static function numero_contas(): int
    {
        return self::$numero_contas ++ ;
    }

}

Gostaria de um help Obrigado!!

5 respostas
solução!

Boa tarde Guilherme,

O namespace utilizado está com o nome diferente do namespace da classe, está Cursos_alura\POO\Model\Conta na classe Titular e está Cursos_alura\POO\Modelo\Conta\Titular no seu index, Modelo em um e Model no outro.

Substituí então Model por Modelo ou então o inverso e vê se isso resolve.


Outra observação é que na classe Conta o namespace está com uma parte extra, com o nome da classe no final: Cursos_alura\POO\Model\Conta

Então além de fazer a mudança acima, remove o Conta do final no namespace da classe e , caso necessário, corrige a parte onde está Model também.

Espero ter ajudado, qualquer dúvida é só falar!

Há dois dias estou apanhando com esta atividade. Tentei no VSCode e no PHPStorm, Windows e Linux, Xammp (que desinstalei) e agora no ambiente PHP/Apache e sempre o mesmo erro. Hj baixei o código do professor, não alterei nada, e nem mesmo ele executa. O que devo fazer?

[Running] php "c:\Apache24\htdocs\PHPCourses\PHPAlura\polim\teste-saque.php"
PHP Fatal error: 
Fatal error: Uncaught Error: Class 'Alura\Banco\Modelo\Conta\ContaPoupanca' not found in C:\Apache24\htdocs\PHPCourses\PHPAlura\polim\teste-saque.php:11
Stack trace:
#0 {main}
  thrown in C:\Apache24\htdocs\PHPCourses\PHPAlura\polim\teste-saque.php on line 11
 Uncaught Error: Class 'Alura\Banco\Modelo\Conta\ContaPoupanca' not found in C:\Apache24\htdocs\PHPCourses\PHPAlura\polim\teste-saque.php:11
Stack trace:
#0 {main}
  thrown in C:\Apache24\htdocs\PHPCourses\PHPAlura\polim\teste-saque.php on line 11

[Done] exited with code=255 in 0.3 seconds

Olá Fabiana, eu testei o código da aula e não tive erros, mas a gente pode analisar o seu código para descobrir o que está acontecendo.

Só com mais informações e alguns testes para entender melhor o problema, talvez seja melhor iniciar um novo tópico, e lá além da mensagem de erro compartilha também o seu código por favor. Informa também em qual parte do curso você está, parece ser uma aula diferente da que o Guilherme marcou nesse tópico.

Fico no aguardo.

Obrigada Lucas, não será mais necessário. O exercício é o mesmo sim, mas fiz um último teste. O curso do Alura estava no mesmo diretório que outros cursos PHP que faço. Removi-o para uma pasta exclusiva e funcionou...mas não entendi como esse autoloader (se o erro era no apontamento dele)funciona neste caso, e isso é ruim pq precisarei entender o mecanismo para as aulas seguintes,

Sem problemas Fabiana, mesmo sem entender os detalhes do funcionamento você vai seguindo adiante nos cursos que você vai entendendo cada vez mais.

Para entender o que foi que causou o problema que você falou antes só com alguns testes e mais informações do seu código atual.

E se aparecer mais algum problema ou dúvida é só falar aqui no fórum que a gente tenta ajudar.