Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Usar namespace


Rafael Laurindo

Pergunta

Galera, to precisando usar namespace, não quero ficar colocando uma porrada porção de set_include_path() para resolver meus problemas, pois creio que com namespace poderia ser resolvido mais simplesmente. Li no php.net mas não estou assimilando namespace a nada. Ainda não estou vendo como usa-lo, por isso, preciso da ajuda de vocês. Preciso usar na seguinte situação. Tenho uma pasta chamada sistema1, dentro desta pasta tem o diretório glib/php/, dentro de glib/php/ existem várias bibliotecas, onde todos os módulos de sistema1 deve utilizar, e uma pasta chamada pt_br; dentro de pt_br, tem a classe Time, esta possui métodos como conversor de mês, o sistema informa um valor e ele retorna o nome do mês por extenso, em português, por exemplo; dentro de glib/php também existe uma classe Time, sendo esta para métodos mais gerais de tempo. Dentro de sistema1, tenho ainda o módulo (pasta) modulo1, dentro de módulo1, tenho a pasta lib, onde tem vários arquivos php, específicos de utilização no módulo, esses arquivos utiliza as classes contidas em glib/php. Aí está minha dúvida, até onde sei, o php não deixa repetir nome de classes, salvo usando namespace, como podem ver, tenho duas classes Time. Para acessar esses arquivos de glib/php, uso uma classe chamada Main que fica em lib, que fica em modulo1, onde essa tem o set_include_path() apontando para lá. Estou tendo problema em usar a classe Time da pasta pt_br, dentro de glib/php.

Os diretórios são esses se ficou um pouco confuso.

sistema1/modulo1/lib/Main.php

sistema1/glib/php/pt_br/Time.php

sistema1/glib/php/Time.php

Tentem entender e me de uma luz de como eu poderia usar namespace neste caso. Desde já agradeço.

Obs.: Alguns nomes, como podem ver são fictícios, porém outros não.

Editado por Rafael Laurindo
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom galera, aprendi a usar o bendito.

o comando namespace define o path onde está a classe;

o comando use importa um namespace, ou seja, uma classe com seu namespace prefixado, criando um alias (máscara) para a mesma.

Assim, quando formos instanciar a classe, a qual importamos, devemos usar o nome do alias depois da palavra chave new, como abaixo.

<?php
use ptBR\Time as BrTime;

$brtime = new BrTime();
...
Ou, se não quisermos usar um alias, é só fazer assim
$brtime = new ptBR\Time();
Mas imagine que o namespace fosse imenso, e tivéssemos que instanciar a classe várias vezes? Se o namespace não fosse declarado na classe Time, nada funcionaria. Fiz ainda, um arquivo chamado autoload.php, esse converte uma classe, que está com namespace prefixado, para um path.
<?php

require_once 'paths.php';

function __autoload($class)
{
    $class = str_replace('\\', '/', $class);
    require_once $class . '.php';
}

O arquivo paths.php, possui os comandos que incluiem os paths dos includes, o set_include_path(get_include_path . PATH_SEPARATOR . '...'). Ou seja, registra os pacotes.

E assim aprendi a usar o namespace, que para o caso de classes com nome igual, é criado um prefixo para a mesma, diferenciando-as, ficando assim, mais fácil de fazer includes, e podendo usar nomes repetidos de classes.

Editado por Rafael Laurindo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...