[ad#propaganda]
Olá, pessoal!
Hoje estou aqui para tratar de um assunto relativamente novo: Namespaces no PHP.
Eu digo relativamente novo pois eu ainda não tinha trabalhado com ele, mas na verdade o recurso foi lançado oficialmente no PHP 5.3.0, em 30 de junho de 2009. Uau, há mais de dois anos!
Infelizmente uma boa parte dos serviços de hospedagem por aí ainda não suporta oficialmente esta versão. O que é uma pena, pois acabamos ficando presos a versões antigas e sem poder usar novos recursos, como o sistema de Namespace.
Bem, antes de entrarmos na implementação de namespaces no PHP, acho interessante explicar primeiro o conceito de Namespace.
Apenas traduzindo o termo já temos uma ideia do que ele faz, ele é um “espaço de nomes”. Mas como assim um espaço de nomes?
Uma das estruturas mais simples que temos no PHP são as funções. Cada função tem o seu próprio espaço de nomes, ou escopo, isso já é assim desde que eu conheço o PHP. O que quero dizer com cada função tem seu espaço de nomes é que você pode ter duas variáveis $nome em duas funções diferentes e, mesmo tendo o mesmo nome, elas não são a mesma variável. Isso acontece pois cada uma está em um bloco lógico diferente. Veja um exemplo:
1 2 3 4 5 6 7 8 9 | <?php function funcao1() { $nome = "Jimi"; } function funcao2() { $nome = "Hendrix"; } |
Legal, isso funciona para variáveis com o mesmo nome. Mas e se eu preciso ter funções com o mesmo nome? Bem, isso também é possível usando classes e métodos estáticos. Mas neste caso, estou usando métodos de uma classe, e não exatamente funções independentes. Veja este exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // Definindo as classes class classe1 { public static function exibeNome($nome) { print("classe1: ".$nome); } } class classe2 { public static function exibeNome($nome) { print("classe2: ".$nome); } } // Usando os métodos estáticos classe1::exibeNome('Jimi'); classe2::exibeNome('Hendrix'); |
Mas o que acontece quando eu preciso de funções soltas? Sou obrigado a usar uma estrutura de classes classes? Ou quem sabe dar nomes maiores para as funções? Nomes como minhalib1_funcao() e minhalib2_funcao()? Não prático, né? É aí que entram a o sistema de Namespaces do PHP.
Acho melhor mostrar o código do que explicar muito. Vamos lá, vou criar um arquivo ‘names.php’ com dois namespaces e um arquivo ‘programa.php’ que usa as funções nos namespaces.
Arquivo ‘names.php‘:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php namespace form_tabela { // Este namespace exibe um form usando tabelas function imprime_form($form) { // Imprimindo o form em tabela echo "tabela..."; } } namespace form_tableless { // Este namespace imprime um form sem usar uma tabela function imprime_form($form) { // Imprimindo o form sem tabela echo "tableless!"; } } |
Arquivo ‘programa.php‘:
1 2 3 4 5 6 7 8 | <?php include('names.php'); // Usando as funções form_tabela\imprime_form('form1'); form_tableless\imprime_form('form2'); |
Percebam que os dois namespaces têm funções com o mesmo nome “imprime_form()“, mas não problema em definir uma função que já existe. Aliás, eu poderia até mesmo criar funções com nomes que já existem na biblioteca padrão do PHP:
1 2 3 4 5 6 7 | <?php namespace minhaLib { // strtr já existe na biblioteca padrão do PHP function strtr($str) { echo TRUE; } } |
O uso de namespaces pode simplificar bastante o desenvolvimento de sistemas mais complexos e também de bibliotecas para distribuir. Ao utilizar o sistema de namespaces você também evita problemas de colisão de nomes com outras bibliotecas, sem ter que dar nomes grandes para suas funções.
Então essa foi a dica de hoje. Use os namespaces e organize melhor seus projetos.
E para quem quer aprender a utilizar um framework para desenvolver sistemas, eu recomendo o curso “Turbine-se com CodeIgniter“. Este é um curso que eu leciono, online, você pode fazer no conforto da sua casa, usando o seu computador para acessar a sala de aula virtual. Acesso o site do curso, conheça o conteúdo e se inscreva.
Let’s code!
InFog
Outros textos que você pode gostar:
- Migrations no CodeIgniter Olá, pessoal! Hoje vou falar sobre o sistema de Migrations...
- CodeIgniter 2.0.0 Olá, pessoal! No dia 28 de janeiro de 2011 foi...
- Brincando com Matemática, Python e PHP [ad#propaganda] Olá! Estava aqui elaborando uns exercícios e me surgiu...
Related posts brought to you by Yet Another Related Posts Plugin.








>




No seu texto você confundiu um pouco escopo com namespace. São coisas diferentes.
O que garante que você pode ter duas variáveis com nomes iguais em funções diferentes é o escopo.
Tem q trocar N por S em “Uma das estruturas mais simples que temos no PHP Não as funções.”
Valeu pelas dicas, Felipe! O escopo é uma das formas de se garantir que não haverá conflito de nomes.
Bom Dia.
Aquié o Klaibson, parceiro na troca de links, entre nossos blogs.
Quero apenas lhe informar que troquei de links e peço para atualizar em seu blog, meu novo endereço é http://www.livreoffice.ws
Boa semana.