Como sabemos a cada chamada a uma classe é preciso incluir o arquivo que contenha o seu código. Uma das maiores dificuldades que encontrei quando comecei a programar em php utilizando recursos de Orientação a Objetos foi exatamente a chatisse que era a inclusão desses arquivos nos programas que instanciavam seus objetos.
Depois de sofrer um pouco incluindo os tais arquivos programa a programa passei a centralizar estas inclusões em um único arquivo, o que facilitou um pouco a rotina, porém quanto maior era o número de classes utilizadas no sistema mais feio ficava este arquivo e maior era a quantidade de arquivos incluídos para nem sempre serem utilizados.
Felizmente agora esse sofrimento chegou ao fim. A partir do PHP 5 tivemos a implementação de uma função simples, de nome curto e intuitivo que mudou nossas vidas: Apresento a vocês o __autoload().
De utilização bem simples a função faz uma inclusão seletiva e, conforme especificação do próprio php.net, ela é automaticamente chamada no caso de você tentar usar uma classe que ainda não foi definida. Ao chamar essa função o ’scripting engine’ tem uma última chance para carregar a classe antes que o PHP falhe com erro.
Supondo que tenha um arquivo que utiliza as seguintes classes: Conexao, Login e Usuarios, e que estas classes estejam em uma pasta de nome ‘classes’, teríamos a seguinte estrutura:
<?php
require_once ‘classes/Conexao.class.php’;
require_once ‘classes/Login.class.php’;
require_once ‘classes/Usuario.class.php’;
$objConn = new Conexao();
$objLogin = new Login();
$objUsuario = new Usuario();
?>
Com o autoload temos algo assim:
<?php
__autoload($class_name){
require_once ‘classes/’. $class_name.’.class.php’;
}
$objConn = new Conexao();
$objLogin = new Login();
$objUsuario = new Usuario();
?>
Pronto, todas suas classes são instanciadas sem você escrever uma única linha a mais.
Com um pouco mais de estudo e em uma estrutura mais organizada é possível tornar esta função muito mais abrangente, porém é um assunto que pretendo abordar em um próximo artigo.
See you…


