+14

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 - 10 de 11 comentários
AndersonSilva disse:
Ótimo Artigo sobre hiarquia, estou aprendendo sobre o mesmo e estou postando todos os conteudos da faculdade no site http://www.baixafree.com.br
Obrigado!!!!
20/01/2013 4:42am (~5 anos atrás)

Marcos disse:
a idéia é usar MVC, no entanto, acredito que os Frameworks lhe deixam limitados a ele.Interessante escrever o próprio Framework, fica mais ao seu gosto.
01/01/2013 5:35pm (~5 anos atrás)

Jefrey disse:
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 (~7 anos atrás)

Jefrey disse:
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 (~7 anos 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 (~7 anos atrás)

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

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

Amigo, muito explicativo o artigo, parabéns pela iniciativa!
18/11/2010 4:57pm (~7 anos 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 (~7 anos atrás)

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

Novo Comentário:

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