__autoload()::Santa função

Quem trabalha com PHP sabe o parto que é ficar incluindo os arquivos com as classes da sua aplicação, que se não estão bem estruturadas em pastas/diretórios/pacotes torna-se tudo uma bagunça. Se você trabalha centralizando as requisições em um arquivo para ai rodar os diferentes scripts dos seu projeto e não quer ficar incluindo todas os arquivos de classes em cada programa que faz eis a solução: __autoload(). Segue a descrição do PHP.net para esta belezura:

Muitos desenvolvedores ao desenvolver aplicações orientadas a objeto criam um arquivo PHP para cada definição de classe. Um dos maiores contratempos é ter de escrever uma longa lista de includes no início de cada script(um include para cada classe necessária).

Com PHP 5 isso não é mais necessário. Você pode definir uma função __autoload que é 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.

Digamos que você tenha um arquivo “index.php”. Onde voce faria:(lógico, supondo que suas classes estejam em “/classes/”)

<?
include_once(”classes/User.class.php”);
include_once(”classes/Store.class.php”);
include_once(”classes/Book.class.php”);
$oUser = new User();
$oStore = new Store();
$oBook = new Book();
?>

Com o autoload você faz assim:

<?
function __autoload($class_name) {
require_once(”classes/”. $class_name . “.class.php”;
}
$oUser = new User();
$oStore = new Store();
$oBook = new Book();
?>

E todos seus objetos serão instanciados como se com o include/require no script.

Vamos além… sou um cara muito preguiçoso, e tenho classes em 3 pastas: “domain”,”engine” e “util”:

<?
$sep = PATH_SEPARATOR
set_include_path(get_include_path() . “$sep./domain/$sep./engine/$sep./util/”);
function __autoload($className){
include($className . “class.php”);
}
$oUser = new User();
$oStore = new Store();
$oBook = new Book();
?>

Viu como é bom ser preguiçoso? até a linguagem apóia! Lógico que é muito bom ter um controle de “o que é incluído quando”, mas às vezes temos que utilizar certas coisas do tipo pra facilitar nossa vida.

Não ha comentários

Leave a reply