Artigos & Ideias

Vantagens do AutoLoad em PHP

Escrito por:

A função __autoload() do php serve para acabar, ou pelo menos, suavizar o problema ter de fazer inúmeros includes para cada ficheiro de uma classe numa aplicação orientada a objectos.

A utilidade da função é, quando tentamos instanciar uma classe ou fazer uma chamada à mesma, caso esta ainda não esteja carregada (incluída) é feita uma chamada à função __autoload, que recebe como parâmetro o nome da classe que estamos a ter criar, ficando assim : __autoload($class).

Deste modo, podemos utilizar esta função de modo a que ela procure o ficheiro com esta classe e o inclua, para não termos necessidade de preocupar-nos com isso. Esta função é especialmente útil em aplicações que seguem o modelo de “uma classe por ficheiro”, sendo assim se criamos uma classe chamada “Utilizador”, denominamos esse ficheiro como “Utilizador.class.php”.

Desta forma podemos criar a __autoload($class) de forma que procure o ficheiro devido.
Vou mostrar um exemplo:

< ?php
	function __autoload($class) {
		if(!findClass($class,"./")) {
            		echo "<h1>Classe não encontrada: $class !!";
            		exit(0);
        	}
    	}

    	function findClass($class,$dir) {
        	$apontador = opendir($dir);
        	while($file = readdir($apontador)) {
            		$file_path = $dir."/".$file ;
            		if($file == "." or $file == "..")
                		continue;
            		else if(is_dir($file_path)) {
                		if(findClass($class,$file_path))
                    			return true ;

            		} else if($file == $class.".class.php") {
                		require_once($file_path);
                		return true ;
            		}
        	}
        	return false ;
    	}
?>

Uma explicação rápida sobre o código acima, na função autoload() chama-se a função findClass, caso não seja encontrada a classe escreve-mos um erro e terminamos o programa.

Em findClass é onde a “magia” acontece, recebemos a classe que procuramos, e a directoria a localizar, percorremos essa directoria à procura do ficheiro com o modelo $class.class.php , sendo $class o nome da classe. Caso não encontremos o ficheiro pretendido, a função chama recursivamente findClass nas directorias encontradas.

Ao encontrarmos o ficheiro ele inclui o mesmo, ou seja, na verdade faz um require e retorna true.

1


Sobre o Autor

Carlos Gonçalves é um Freelancer com bastante experiência em linguagens de programação e webdesign. Vocacionado para as novas tecnologias, aposta na qualidade dos serviços, atendimento rápido e sempre disponível para melhor satisfazer os seus clientes. Autor do site cgoncalves.com

Comentários

  1. João Pedro Pereira  8 Fevereiro 2009

    O autoload é sem dúvida um parâmetro extremamente útil. Eu utilizo-o sempre no desenvolvimento, e só há que ter em conta dar o “mesmo” nome há classe que ao ficheiro.

    Bom trabalho!

    (responder)

Comentar

Nota: A moderação de comentários está activada e pode atrasar o teu comentário. Não há necessidade de reenviares o teu comentário.

More in Outros (1 of 12 articles)

# #