Objota O mundo orientado a objetos

Utilizando spl_autoload_register

Posted on fevereiro 25, 2011

Posted by Rodrigo Ireno

Neste breve artigo quero mostrar como funciona a função spl_autoload_register que atua igualmente a  função __autoload. Neste caso o próprio nome já descreve em parte o que ela faz, pois esta função registra (ou empilha) mais conteúdo dentro de um escopo de autoload. Disse “escopo” e não função pois ela não pode ser utilizada junto com a função __autoload.

A grande vantagem de utilizar esta função é que você pode incluir módulos em seu sistema web sem se preocupar em incluir as classes deste módulo em seu class path. E utilizá-la é tão fácil quanto o autoload convencional.

Utilizando __autoload:

supondo que os arquivos Objota.class.php e Joao.class.php estão no mesmo diretório do arquivo index.php

Objota.class.php


<?php

class Objota{

 public function __construct(){
 echo "Incluiu Objota<br/>";
 }

}

?>

Joao.class.php


<?php

class Joao{

 public function __construct(){
 echo "Incluiu Joao<br/>";
 }

}

?>

index.php


<?php

function __autoload( $nomeDaClasse ){

 if(file_exists( $nomeDaClasse.".class.php"  )){
 include($nomeDaClasse.".class.php");
 }
 else{
 echo "Não foi possível carregar a classe";
 }

}

$obj = new Objota();

$o = new Joao();

?>

Utilizando a função spl_autoload_register:

Desta vez vamos supor que as classes Objota e Joao são de módulos completamente diferentes, por isso representei com nomes diferenciados., vejamos abaixo:

Objota.objota.class.php


<?php

class Objota{

 public function __construct(){
 echo "Incluiu Objota<br/>";
 }

}

?>

Joao.joao.class.php


<?php

class Joao{

 public function __construct(){
 echo "Incluiu Joao<br/>";
 }

}

?>

index.php


<?php

//funcao que carrega classes do modulo OBJOTA
function objota_carregar_classes( $nomeDaClasse ){

 if(file_exists( $nomeDaClasse.".objota.class.php"  )){
 include($nomeDaClasse.".objota.class.php");
 }

}
spl_autoload_register("objota_carregar_classes");

$obj = new Objota();

//funcao que carrega classes do modulo JOAO
function joao_carregar_classes( $nomeDaClasse ){

 if(file_exists( $nomeDaClasse.".joao.class.php"  )){
 include($nomeDaClasse.".joao.class.php");
 }

}

spl_autoload_register("joao_carregar_classes");

$jo = new Joao();

?>

Observação: A função spl_autoload_register sobrescreve a função autoload então se for adotar o uso desta, certifique-se de que nenhuma parte de seu sistema esteja usando o autoload convencional mas sim a spl_autoload_register.

Esta é uma solução, por exemplo, para a implantação do framework Smarty 3.0 ao seu sistema web. Pois ele utiliza esta função, e caso você não faça uso dela também, terá problemas.

Bom caros leitores este artigo (dica), fica por aqui. Caso haja dúvidas poste aí!