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

Autoload não encontra classes

O autoload não encontra classe funcionario autoload.php;

<?php

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;


    }

});

Funcionario.php;

<?php

namespace Alura\Banco\Modelo;

class Funcionario extends Pessoa{

    private $cargo;
    private $salario;

    public function __construct(string $nome, CPF $cpf, string $cargo, float $salario){

        parent:: __construct($nome, $cpf);
        $this->cargo = $cargo;
        $this->salario = $salario;
    }

    public function recuperaCargo(): string{
        return $this->cargo;
    }

    public function alteraNome(string $nome): void{

        $this->validaNomeTitular($nome);
        $this->nome = $nome;

    }

    public function recuperaSalario(): float{
        return $this->salario;
    }

    public function calculaBonificacao(): float{
        return $this->salario*0.1;
    }
}
2 respostas
solução!

Rodrigo,

Tudo bem contigo? Revisei teu código e esta tudo correto!

1) Verifique se o teu arquivo Funcionario.php esta dentro da pasta: src\Modelo\Funcionario.php Lembre-se de que 'Alura\Banco' esta sendo substituido por 'src'. Alura\Banco é apenas um namespace. O Autoload substitui 'Alura\Banco' por 'src'

2) Verifique se no arquivo onde tenta usar o funcionario, esta usando: use Alura\Banco\Modelo\Funcionario;

3) No começo do arquivo esta usando o comando abaixo?

require_once 'autoload.php';

Uma dica para depurar um possível erro é dar um echo em cada linha do teu arquivo autoload.php. Pode usar o código abaixo. Depurado o erro, remova os comandos 'echo' e 'exit()'. Com o código abaixo conseguira analisar passo a passo o que o autoload esta fazendo.

autoload.php

<?php

spl_autoload_register(function(string $nomeCompletoDaClasse) {

    echo $nomeCompletoDaClasse . PHP_EOL;

    $caminhoArquivo = str_replace('Alura\\Banco', 'src', $nomeCompletoDaClasse);

    echo $caminhoArquivo . PHP_EOL;

    $caminhoArquivo = str_replace('\\', DIRECTORY_SEPARATOR, $caminhoArquivo);

    echo $caminhoArquivo . PHP_EOL;

    $caminhoArquivo .= '.php';

    echo $caminhoArquivo . PHP_EOL;
    exit();

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

    }

});

Espero ter ajudado. Se te ajudar, por favor marcar tópico como solucionado, se não, se restar alguma dúvida postar por aqui. Um abraço e bons estudos!

Olá boa tarde Marco, muito obrigado era a organização dos arquivos mesmo, coloquei os da raiz dentro do src, já organizei tudo está funcionando. Obrigado!