+9

Programar de forma Hierárquica

criado por Rubens Takiguti Ribeiro em 24/11/2009 7:54pm
Existem vários outros pontos onde é aplicada a estruturação de forma hierárquica. Uma delas é na utilização de dados em sessão (session). PHP oferece uma variável superglobal chamada $_SESSION e qualquer script pode definir/obter valores nesta variável que guarda um vetor associativo.

Uma técnica que garante que um determinado dado armazenado em sessão por um arquivo não seja sobrescrito por outro (por terem utilizado o mesmo índice do vetor), é padronizar a forma de indexação do vetor.

Uma estratégia simples, mas pouco usual, é utilizar o nome completo do arquivo como índice do vetor. Um exemplo é apresentado abaixo:

Arquivo a.php
...
$_SESSION[__FILE__]['x'] = 1;
...


Arquivo b.php
...
$_SESSION[__FILE__]['x'] = 1;
...

Note que, aparentemente, os dois arquivos armazenam dados na mesma posição de $_SESSION, porém, isso não ocorre. A constante __FILE__ é uma constante mágica do PHP e ela sempre guarda o nome do arquivo corrente. Logo, o primeiro arquivo armazena um valor em $_SESSION['/.../a.php']['x'], enquanto o segundo armazena em $_SESSION['/.../b.php']['x'] (os três pontos indicam um caminho absoluto até os arquivos). Esta técnica é útil quando você quer usar dados em sessão apenas para o arquivo corrente. Embora ele seja visível para outros scripts, você ao menos tem o controle sobre o que é sobrescrito propositalmente e o que não.

Porém, usar o nome completo do arquivo precisa armazenar um índice com tamanho muito grande e, além disso, pode ser pouco amigável quando o valor precisa ser compartilhado entre vários scripts. Uma solução, é definir (padronizar) os "índices de primeiro nível", ou seja, os índices diretos da variável $_SESSION. Podemos, por exemplo, definir índices diretos como sendo: "classes", "modulos", etc. Assim, se uma classe precisar guardar algo em sessão, ele guarda desta forma:

...
$_SESSION['classes'][__CLASS__]['x'] = 1;
...

Note que __CLASS__ também é uma constante mágica do PHP e guarda sempre o nome da classe onde a constante foi usada.

Se algum script do módulo "categorias" precisar guardar algo em sessão, ele pode fazer assim:

...
$_SESSION['modulos'][$modulo]['x'] = 1;
...

Tal que a variável $modulo deve guardar o nome do módulo corrente.

Para tudo isso, foi utilizado apenas o conceito de vetores multidimensionais. Ou seja, vetores que armazenam outros vetores.

Comentários:

Mostrando 1 - 9 de 9 comentários
para ajudar eu faço um mapa mental com o mindmeister.com e coloco em ordem os ítens do site.
09/12/2010 8:06pm (~1 ano atrás)

para ajudar eu faço um mapa mental com o mindmeister.com e coloco em ordem os ítens do site.
09/12/2010 8:06pm (~1 ano atrás)

Marcelo Iwata disse:
Legal..
Recomendo a quem quer esmiuçar o MVC sob a perspectiva de um Gerenciador de Conteúdo estude a estrutura do Joomla e seus módulos e componentes.
09/12/2010 3:51pm (~1 ano atrás)

PARABÉNS E COMO O COLEGA FALOU, ME LEMBRA OS MEUS PRIMEIROS PROJETOS NA FACULDADE.
04/12/2010 6:22pm (~1 ano atrás)

Luiz Tarabal disse:
Muito bom o artigo.
25/11/2010 2:23am (~1 ano atrás)

Amigo, muito explicativo o artigo, parabéns pela iniciativa!
18/11/2010 4:57pm (~1 ano atrás)

Muito bacana. E é engraçado quando eu li as suas primeiras palavras e lembrei dos meus primeiros sistemas, meses atrás, com absolutamente tudo jogado numa pasta qualquer.
17/11/2010 12:27am (~1 ano atrás)

Excelente artigo, parabéns
15/11/2010 11:48am (~1 ano atrás)

O maior exemplo dessa hierarquia funcionar são os frameworks, imagine a "zona" que seriam eles sem utilizar hierarquia.
30/09/2010 8:32am (~1 ano atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)