3
respostas

spl_autoload_register Não funciona

Este é o meu código:

spl_autoload_register(function (string $nomeCompletoDaClasse) {
    $caminhoArquivo = str_replace('Alura\\Banco', 'src', $nomeCompletoDaClasse);
    $caminhoArquivo = str_replace('\\', DIRECTORY_SEPARATOR, $caminhoArquivo);
    $caminhoArquivo .= '.php';

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

O programa da erro pois não encontra a Classe Endereco:

PHP Fatal error: Uncaught Error: Class "Alura\Banco\Modelo\Endereco" not found in /home/estagiario/Desktop/PHP/3 - Projeto/banco.php:21 Stack trace: #0 {main} thrown in /home/estagiario/Desktop/PHP/3 - Projeto/banco.php on line 21

Quando adiciono um Echo $caminhoArquivo e exit();

esse é o resultado: src/Modelo/Endereco.php

Alguém pode me ajudar?

3 respostas

Olá Bruno, tudo bem?

Pelo código que você compartilhou, parece que o problema está no mapeamento do caminho do arquivo da classe Endereco. No seu código, você está substituindo a string 'Alura\Banco' por 'src' no caminho do arquivo, mas aparentemente a classe Endereco está no namespace 'Alura\Banco\Modelo'.

Uma solução para resolver esse problema seria adicionar mais uma substituição no caminho do arquivo, substituindo 'Alura\Banco\Modelo' por 'src/Modelo'. Dessa forma, o caminho do arquivo seria corretamente mapeado para 'src/Modelo/Endereco.php'.

spl_autoload_register(function (string $nomeCompletoDaClasse) {
    $caminhoArquivo = str_replace('Alura\\Banco', 'src', $nomeCompletoDaClasse);
    $caminhoArquivo = str_replace('\\', DIRECTORY_SEPARATOR, $caminhoArquivo);
    $caminhoArquivo = str_replace('Modelo', 'src/Modelo', $caminhoArquivo);
    $caminhoArquivo .= '.php';

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

Espero que isso resolva o problema! Se tiver mais alguma dúvida, é só perguntar.

Espero ter ajudado e bons estudos!

Aparentemente o código estava certo Sarah, obrigado pela ajuda, estava tentando rodar ele no VisualStudio e não foi, mas no Phpstorm funcionou, sabe pq pode ter dado erre la no VisualStudio?

Estou com o mesmo problema, uso sistema operativo Pop_OS.

O caminho 'e o seguinte: nelio/src/Modelo/Conta o índex está no src As classes Pessoa, Funcionario, Endereco estão em Modelo As classes Conta e titular estão na pasta Conta

O erro: Fatal error: Uncaught Error: Class "Alura\Banco\Modelo\Funcionario" not found in /var/www/html/nelio/src/index.php:34 Stack trace: #0 {main} thrown in /var/www/html/nelio/src/index.php on line 34

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

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