Teria que colocar o namespace todo dentro da função class_exists ? class_exists('classes/funcionario/Diretor') ??
Teria que colocar o namespace todo dentro da função class_exists ? class_exists('classes/funcionario/Diretor') ??
Ewerton, boa tarde!
Caso você entre na documentação do PHP (https://www.php.net/manual/pt_BR/function.class-exists.php) verá que essa função em especifica usa a o autoload como segundo parâmetro, isso pois ele verifica a existência da classe através dele.
Ao usar o class exists, nós passamos o namespace da classe justamente, para o autoload encontra-lá
Aqui vai um exemplo:
echo class_exists('Controller\Refrigerator');
Espero ter ajudado e bons estudos!
Eu fiz meu autoload de um jeito um pouco diferente, talvez não seguindo o PSR-4 mas funcionou como o jeito convencional exceto quando se tem duas classes com o mesmo nome, ainda nao implementei algo para tratar caso isso ocorra. Ai no meu caso o autoload ficou assim :
/**
* Função para fazer o auto load das Classes
* @var $folders - Nome das pastas onde se encontram as Classes ('Testes'.DIRECTORY_SEPARATOR.'Testando' (Se for pasta com subpasta))
*
*/
spl_autoload_register(function ($nomeClasse){
$folders = array
(
//'Testes'.DIRECTORY_SEPARATOR.'Testando' (Se for pasta com subpasta)
'Dao',
'Models',
'Controllers',
'Libs',
'Services'
);
if (file_exists($nomeClasse.".php") === true) {
require_once($nomeClasse.".php");
}else{
foreach ($folders as $folder) {
if(file_exists("Classes" .DIRECTORY_SEPARATOR . $folder . DIRECTORY_SEPARATOR . $nomeClasse.".php") === true){
require_once("Classes" .DIRECTORY_SEPARATOR . $folder . DIRECTORY_SEPARATOR . $nomeClasse.".php");
}
}
}
});
E quando eu uso o class_exists eu uso assim
if(class_exists(ucfirst($tokens[1]))){
No caso tokens[1] é o que vier escrito na URL depois da primeira Barra /
mas se eu usasse o autoload com namespace teria que colocar dessa maneira abaixo ?
if(class_exists('CaminhoPasta/'.ucfirst($tokens[1]))){
Ewerton, boa tarde!
O caminho da pasta estaria no seu arquivo autoload você só precisaria passar o namespace da classe no parâmetro