Como criar bibliotecas (libraries) no CodeIgniter
19 de dezembro de 2011, em Passos Iniciais, por Tárcio Zemel

Bibliotecas (ou libraries) no CodeIgniter são importantíssimas, pois, através delas, podemos estender recursos do framework, seja criando nossas próprias bibliotecas ou pegando recursos já prontos disponibilizados pela comunidade. Para o primeiro caso, aprenda como criar bibliotecas no CodeIgniter e veja como essa criação é simples e fácil de ser feita.
O que são as bibliotecas no CodeIgniter
Bibliotecas no CodeIgniter nada mais são do que classes PHP localizadas em /application/libraries. Perceba que existe, também, a pasta /system/libraries/, mas como foi visto no artigo sobre a estrutura de diretórios do CodeIgniter, dentro de /system ficam os arquivos de core do CI, portanto, é prudente mexer ali somente quando realmente souber o que está fazendo.
Fique sabendo, também, que, caso crie uma biblioteca com o mesmo nome de alguma biblioteca nativa do CodeIgniter, esta será sobreescrita pelo seu código! Tenha muita atenção!
Convenções sobre libraries no CodeIgniter
Em relação a bibliotecas no CI, com exceção das que são para mexer com bancos de dados, é possível:
- Criar novas bibliotecas
- Estender bibliotecas nativas
- Sobreescrever bibliotecas nativas (!)
Como vimos, os arquivos devem ser criados em /application/libraries e seguir as seguintes convenções:
- O nome deve capitalizado. Por exemplo: Minhalib.php
- A declaração da classe também: class Minhalib
- O nome do arquivo e da classe devem ser o mesmo (vide exemplos acima)
Veja este protótipo de como deve ser uma library no CodeIgniter:
1 2 3 4 5 6 7 8 9 10 11 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Minhalib { public function __construct() { } [...] } /* End of file Minhalib.php */ |
E pronto! Já temos uma biblioteca pronta e já podemos usá-la em nossa aplicação! Para usar, você já sabe, basta seguir o que foi explicado no artigo “Carregando bibliotecas (libraries) no CodeIgniter“. Em um controller, basta usar:
1 | $this->load->library('minhalib'); // Em minúsculo, mesmo |
E, depois, usar quaisquer funções que sua library contenha. Vamos passar nosso modelo para o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Minhalib { public function __construct() { } public function ola_mundo() { return 'Olá mundo!'; } } /* End of file Minhalib.php */ |
Então, depois de carregar a biblioteca, para se usar a função ola_mundo(), basta codificar:
1 | $this->minhalib->ola_mundo(); // Sempre em minúsculo |
No caso, como temos um retorno em texto, caso fosse preciso escrever esse retorno:
1 | echo $this->minhalib->ola_mundo(); |
Passando parâmetros no carregamento da biblioteca
É bastante comum ser preciso passar alguns parâmetros na invocação de uma biblioteca. Evidentemente o CI permite fazer isso de uma maneira bastante simples. Primeiramente, vamos preparar nossa classe para receber parâmetros:
1 2 3 4 5 6 7 8 9 10 11 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Minhalib { public function __construct($parametros) { } [...] } /* End of file Minhalib.php */ |
Com isso feito, os $parametros passados o devem ser através de um array (chave/valor). Dessa maneira, na inicialização da classe teríamos algo como:
1 | $this->load->library('minhalib', array('chave1' => 'valor1', 'chave2' => 'valor2')); |
Ou, para facilitar a leitura e entendimento posteriores:
1 2 | $parametros = array('chave1' => 'valor1', 'chave2' => 'valor2'); $this->load->library('minhalib', $parametros); |
Então, você pode fazer o que quiser com esses parâmetros. Só por curiosidade, execute o código acima depois de mudar a biblioteca para:
1 2 3 4 5 6 | class Minhalib { public function __construct($parametros) { print_r($parametros); } } |
Usando recursos do CodeIgniter em bibliotecas
É perfeitamente possível (e frequentemente necessário) utilizar recursos nativos do CodeIgniter em bibliotecas que criamos. Mas, para isso, é preciso fazer uma coisinha antes. Como foi visto anteriormente, para chamarmos algum recurso do CI devemos nos valer de funções usando o $this, mas, no contexto de criação/edição de bibliotecas, isso não funciona; o $this só funciona, por padrão, para models, views e controllers.
Então, para se usar recursos nativos do CodeIgniter em bibliotecas próprias, é preciso atribuir por referência o super objeto do CodeIgniter a uma variável:
1 | $CI =& get_instance(); |
A partir de então, temos acesso a todos os recursos nativos usando a variável $CI (ou qualquer outro nome que você queira):
1 2 3 | $CI->load->helper('url'); $CI->load->library('session'); [...] |
Estendendo bibliotecas nativas do CodeIgniter
Foi explicado no artigo sobre MY_Controller que é possível estender o “controller base” CI_Controller. O mesmo raciocínio se aplica para o caso de ser preciso estender libraries nativas do CI e, para se fazer isso, é um processo tão simples quanto.
Por exemplo, caso queiramos estender as funcionalidades da library nativa de e-mails, nos valemos do já conhecido prefixo de subclasse “MY_” (ou o que você tenha definido em /application/config/config.php):
1 2 3 4 5 6 | class MY_Email extends CI_Email { public function minha_funcao() { [...] } } |
E, para os (não raros) casos em que é preciso chamar o construtor da superclasse na inicialização da biblioteca:
1 2 3 4 5 6 7 8 9 10 11 | class MY_Email extends CI_Email { public function __construct() { parent::__construct(); } public function minha_funcao() { [...] } } |
Feitos os devidos acréscimos de funcionalidades, a chamada para a biblioteca e o uso das funções não se altera em nada:
1 2 | $this->load->library('email'); // SEM o prefixo "MY_" $this->email->minha_funcao(); |
Simples, rápido, objetivo, enfim, nenhum mistério no mundo PHP OO!
Conclusão
Como vimos, criar bibliotecas no CodeIgniter é bastante simples. Seguindo algumas pequenas convenções de localização e nomenclatura, é possível criar funcionalidades espetaculares e/ou estender as (também espetaculares) funcionalidades do CI. Afinal, é para isso que serve um framework! Sua produtividade agradece!
Ah, e espero que você tenha notado o quão fácil é integrar classes feitas em PHP puro ao CodeIgniter, simplesmente as “transformando” em bibliotecas do framework! ;-)


