Nada mais desgastante para um programador quando ele está desenvolvendo um projeto que fatalmente possui inúmeras classes e em certos locais ele precisa utilizar 5, 6 ou até 10 dessas classes e para importar todas as classes ele precisa de muitos requires ou includes.
Mas a partir do PHP 5 a resolução desse problema ficou relativamente simples graças ao método mágico __autoload. Esse método faz as importações das classes por demanda de acordo com a instanciação dos obejtos. Ou seja, ele fará automaticamente o carregamento da classe X apenas quando um objeto da mesma for instanciada. Isso gera menos dores de cabeça ao programador que não precisa importar manualmente todas as classes que for utilizar e ainda deixa o sistema mais leve uma vez que apenas as classes que estão sendo utilizadas serão importadas.
Para utlizar o método __autoload é fácil. Vamos imaginar que estou trabalhando em um arquivo qualquer na raiz do meu projeto e tenho todas as minhas classes implementadas dentro do diretórios Classes.
No exemplo abaixo eu faço a função mágica e logo depois já instancio uma de minhas classes.
1 2 3 4 5 6 7 8 9 10 11 | <?php function __autoload($file){ if(file_exists('Classes/' . $file . '.php')){ require_once('Classes/' . $file . '.php'); } else{ exit('O arquivo ' . $file . ' não foi encontrado!'); } } $Animal = new Animal('Cachorro'); |
Quando eu instancio uma classe, automaticamente o método é executado. Ele verifica se o arquivo existe e faz o require dele. Caso não consiga encontrar ele finaliza exibindo uma mensagem.
Você pode fazer os ajustes que desejar dentro da função para adequá-la às disposições de seus diretórios e classes.
Até a próxima!
Abs.
Siga-me no twitter: @rafaelwendel
Obrigado pelo esclarescimento, mas fiquei com uma dúvida.
Não seria possível fazer isso através do método __construct ?
Olá Thiago,
Os métodos __construct e __autoload não tem nada a ver um com o outro.
O __construct serve para implementar um comportamento que será executado sempre que uma instancia da classe for criada.
Já o __autoload serve para incluir o arquivo onde está implementado uma determinada classe de acordo com a criação de uma instância.
Eu falo sobre o método __construct nesse post: http://www.rafaelwendel.com/2011/11/metodo-magico-construct/
Abs!
O método __construct eu já tinha entendido e ao meu ver o __autoload tinha a mesma função. Dei mais uma pesquisada e descobri que na verdade o __autoload sequer fica dentro da classe. Ele é executado assim que QUALQUER classe é instanciada, recebendo como parâmetro o nome da classe em questão. Dai pode-se fazer qualquer coisa dentro desse método, inclusive dar includes em arquivos como tu mencionou, mas não se restringido apenas a isso. Obrigado pela atenção Rafael, e vou aproveitar para te dar uma dica: seria interessante receber um e-mail de notificação toda vez que alguém respondesse um comentário no seu blog, vários blogs em WordPress utilizam isso. Pode ter certeza que o feedback seria positivo. Eu mesmo, cai no teu blog por acaso novamente e ví que tinhas me respondido. Se tivesse visto antes o assunto já teria se alongado. Abraço.