Método mágico autoload

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

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Obrigado pelo esclarescimento, mas fiquei com uma dúvida.
    Não seria possível fazer isso através do método __construct ?

    1. 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!

  2. 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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *