2
respostas

Fatal Error...

Meu código está dando erro no diretório classes, pois não reconhece????

Fatal error: Uncaught Error: Class 'classes\funcionarios\Diretor' not found in /opt/lampp/htdocs/banco2/index.php:8 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/banco2/index.php on line 8

index.php

<?php 
    ini_set("display_errors", 1);
    require_once "autoload.php";

    use classes\funcionarios\Diretor;// Para identificar o diretório da classe Diretor
    use classes\funcionarios\Designer;

    $diretor = new Diretor();

    $designer = new Designer();

    var_dump($designer);
 ?>

autoload.php

<?php 

    function load($namespace){

        $namespace = str_replace("\\", "/", $namespace); //O namespace é apenas o caminho onde nossa classe está, ela vai trocar as barras invertendo "\" em "/"
        $caminhoAbsoluto = __DIR__ . "/" .$namespace.".php"; //esta variável irá incluir o caminho onde o autoload está no diretório e concatenar com $namespace
        return include_once $caminhoAbsoluto;
    }

    spl_autoload_register(__NAMESPACE__ . "\load");//Toda a vez que instanciar um novo objeto este método será invocado e chamar a função load que é responsável por fazer o carregamento das classes
 ?>

Diretor.php

<?php 

    namespace classes\funcionarios;

    class Diretor{

    }

 ?>
2 respostas

normalmente esse erro acontece quando erramos o namespace ou nome do arquivo que queremos incluir; para ajuda-la a solucionar esse problema, veja primeiramente se seu autoload esta funcionando, va no arquivo autoload, na onde está escrito

 $caminhoAbsoluto = __DIR__ . "/" .$namespace.".php";

troque por

echo $caminhoAbsoluto = __DIR__ . "/" .$namespace.".php";

para verificarmos se o include que o autoload esta fazendo está correto.

Caso perceba que está tudo ok, veja se a classe Diretor está dento do diretório

classes/funcionarios; 

pois se não estiver dentro desse diretório o autoload não o encontrará

normalmente esse erro acontece quando erramos o namespace ou nome do arquivo que queremos incluir; para ajuda-la a solucionar esse problema, veja primeiramente se seu autoload esta funcionando, va no arquivo autoload, na onde está escrito

 $caminhoAbsoluto = __DIR__ . "/" .$namespace.".php";

troque por

echo $caminhoAbsoluto = __DIR__ . "/" .$namespace.".php";

para verificarmos se o include que o autoload esta fazendo está correto.

Caso perceba que está tudo ok, veja se a classe Diretor está dento do diretório

classes/funcionarios; 

pois se não estiver dentro desse diretório o autoload não o encontrará