Autoloading de Objetos no PHP

Novembro 3, 2008 on 1:12 pm | In Informatica, php |

Uma das coisas mais chatas é ter que inserir milhares de includes, gerencia-los e não errar nos Paths quando você tem as classes em diferentes pastas, no PHP 5 isso foi resolvido com o construtor __autoload(), o que ele faz é que quando você chama uma class/interface que não foi definida ele lê automaticamente para você, vejamos um exemplo :

PHP:
  1. function __autoload($class_name)
  2. {
  3.     require_once $class_name . '.php';
  4. }
  5.  
  6. $obj  = new MyClass1();
  7. $obj2 = new MyClass2();

Porém ela pode ser muito mais, imaginando que você tenha as classes em diferentes diretorios e esta usando um MVC, ou tem sua propria estrutura com diversas camadas, você pode na primeira camada criar esta função para que ela leia diferentes pastas procurando sua classe e assim que achar chama-la, sem se preucupar em chamar nenhuma classe, somente utiliza-las :

PHP:
  1. function __autoload($class_name)
  2. {
  3.     //Diretorios
  4.     $directorys = array(
  5.         'classes/',
  6.         'classes/model/',
  7.         'classes/controler/',
  8.         'classes/view/',
  9.         'classes/view/helpers'
  10.     );
  11.    
  12.     //para cada diretorio
  13.     foreach($directorys as $directory)
  14.     {
  15.         //se o arquivo existe no $directory
  16.         if(file_exists($directory.$class_name . '.php'))
  17.         {
  18.             require_once($directory.$class_name . '.php');
  19.             return;
  20.         }           
  21.     }
  22. }


2 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Olha que interessante. Sempre utilizei o autoload para classes, afinal quem gosta de ficar dando include?
    Mas nunca pensei em usá-lo como MVC. Me parece uma excelente idéia. Vou adotar no meu próprio projeto!

    Comment by LeoCaseiro — Novembro 3, 2008 #

  2. E como eu uso essa função, pq tentei aqui e dá erro ao instanciar o objeto, fiz assim: coloquei a função num arquivo na raiz do projeto, fiz o include dele no index.php onde uso uma classe e deu erro, fiz o include em outros arquivo que usa classes e dá erro como se as classes não existisse. Tem algum esquema pra uso?

    Comment by Luis Carlos Quinhone — Fevereiro 15, 2009 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


 

 Assine o feed