Conheça a função __autoload e esqueça que um dia precisou usar listas gigantes de includes

E ae gente, blz?

Bom o post de hoje é pequeno e rápido e com certeza incrívelmente útil, vou mostrar hoje uma técnica que estou usando pra facilitar minha vida na hora de desenvolver meus códigos, o assunto de hoje é o __autoload, uma funçãozinha que está me economizando preciosos minutos no desenvolvimento.

O funcionamento dele é básico, e funciona assim:

Quando você tenta instanciar uma classe o php verifica se essa classe já existe, se não existir ele tenta carregar ela de acordo com a função __autoload que estiver no script.

ex:

1
2
3
function __autoload($class_name) {
	require_once $class_name.'.php';
}

digamos que em algum momento do meu código eu tentei instanciar a classe Groups

1
$groups = new Groups;

se a classe Groups não existir até o momento o php vai tentar incluir o arquivo Groups.php (de acordo com a minha função __autoload) antes de disparar um erro. Ta mas ele sempre vai procurar só pelo nome da classe? depende… tudo depende de como você faz a sua função __autoload, veja o exemplo abaixo para entender.

1
2
3
function __autoload($class_name) {
	require_once 'my/path/to/classes/'.$class_name.'.php';
}

nesse exemplo acima o php vai procurar pela classe na path determinada na função antes de disparar o erro.

Bom é isso, só pra terminar vou dar uma dica que eu estou usando aqui, que é simplesmente adicionar as paths de onde as classes estão ao include_path.

1
2
3
4
5
6
7
8
9
<?php
 
set_include_path(get_include_path() . PATH_SEPARATOR . './libs/');
 
function __autoload($class_name) {
	require_once $class_name.'.php';
}
 
?>

Vou explicar o código:

3
set_include_path(get_include_path() . PATH_SEPARATOR . './libs/');

Adiciona ao include_path do php a pasta ./libs/

5
6
7
function __autoload($class_name) {
	require_once $class_name.'.php';
}

Define a função __autoload que irá procurar pelas classes quando forem instanciadas.

Ufa… cabou, é isso ai gente, como sempre dúvidas, sugestões e puxões de orelha nos comentários por favor :D.

abraço e até a próxima,
ps. esse foi o post mais rápido que eu já postei, da idéia de postar até o fim da revisão do texto demorou 26 min oO.