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

problema no autoload

Estou obtendo erro ao utilizar a função de autoload.

Antes de criar ela e colocar em um arquivo separado o meu código estava rodando normalmente, e ao cirar-la e chamar um echo no param tbm me retornava o nome completo da classe certinho. Mas após complementar com as funcionalidades parou.

Meu código:

spl_autoload_register(function(string $classNamespace){
    $filePath = str_replace('Alura\\Bank', 'src', $classNamespace);
    $filePath = str_replace('\\', DIRECTORY_SEPARATOR, $classNamespace);
    $filePath .= '.php';

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

Erro:

PHP Fatal error:  Uncaught Error: Class 'Alura\Bank\Model\Address' not found in /home/douglas/studies/alura-php-studies/public/bank.php:8
Stack trace:
#0 {main}
  thrown in /home/douglas/studies/alura-php-studies/public/bank.php on line 8

N consigo ver onde que estou deixando passar algo.

2 respostas

Coloquei dento da funçao de autoload

    echo $classNamespace . PHP_EOL;
    echo $filePath;

e obtive como retorno:

Alura\Bank\Model\Address
Alura/Bank/Model/Address.php

A função str_replace não funcionou na troca de Alura\\Bank para src

$filePath = str_replace('Alura\\Bank', 'src', $classNamespace);
solução!

Identifiquei o problema, estava passando $classNamespace como argumento da segunda chamada ao método str_replace, mas deveria ser $filePath.

spl_autoload_register(function(string $classNamespace){
    $filePath = str_replace('Alura\\Bank', 'public/src', $classNamespace);
    $filePath = str_replace('\\', DIRECTORY_SEPARATOR, $filePath); // AQUI
    $filePath .= '.php';

    if (file_exists($filePath)) {
        return require_once $filePath;
    }
});