Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

PHP Orientado a Objetos - Data Access OBject e AutoLoading

Estou concluindo o curso de PHP Orientado a Objetos e um momento, foi ensinado o "autoloading das classes" com a função a seguir:

function carregaClasse($nome){
    require_once("class/".$nome.".php");
}
spl_autoload_register("carregaClasse");

Agora que estou nas aulas em que está sendo ensinado as classes DAO, o instrutor coloca os arquivos de acesso ao banco, como "ProdutoDAO" por exemplo, dentro da pasta "class", junto com as demais classes.

A minha dúvida é: se eu quiser criar uma pasta "dao" para separar os arquivos "Produto" do "ProdutoDAO", como eu farei o autoloading dos meus DAO?

Obrigado desde já!

1 resposta
solução!

Você vai precisar de uma segunda estratégia no seu Autoloading, como por exemplo:

<?php 
if(file_exists("class/{$class}.php")){
    require_once "class/{$class}.php";
}else if(file_exists("dao/{$class}.php"){
    require_once "dao/{$class}.php";
}else{
    // mensagem de erro?
}

Perceba que isso pode ficar muito complexo e era bem comum encontrar códigos com a seguinte estrutura:

<?php 
$pastas = array('class', 'dao');
foreach ($pastas as $pasta) {
    if(file_exists("{$pasta}/{$class}.php")){
        require_once "{$pasta}/{$class}.php";
    }else{
        // mensagem de erro?
    }
}

Apesar de resolver, isso também é ruim, toda vez que pensar em adicionar uma classe ele varre todas as pastas atras do arquivo. Por hora você pode usar isso, mas depois você pode começar a pesquisar sobre PSR's.

Existe uma PSR que recomenda como deveriamos fazer o autoloading das classes de nossas aplicações. Vou deixar o link aqui e você pode pesquisar mais depois. Não se apresse, aprenda as coisas por vez :)

http://www.php-fig.org/psr/psr-4/

Bons estudos!