Andre Metzen


Standard PHP Library

Publicado em php por Andre Metzen, 18 de October de 2007

A SPL (Standard PHP Library) é uma ferramenta ainda muito pouco conhecida do PHP. Um dos principais motivos disso é o fato de possuir pouca documentação oficial. Porém você pode encontrar a especificação completa escondida aqui.

Ela é basicamente um conjunto de classes e interfaces criadas para resolver problemas comuns e prover acesso eficiente a alguns tipos de dados. Como demonstração irei criar uma classe Collection, que será um conjunto de elementos quaisquer. Esse conjunto poderá ser acessado a principio como apenas como um vetor, e mais posteriormente publicarei outros artigos onde o tornarei mais poderoso.

PHP:
  1. <?
  2.  
  3. class Collection implements ArrayAccess
  4. {
  5.     protected $array = array();
  6.  
  7.     public function offsetExists($offset) // verifica se existe o elemento cujo indice é $offset
  8.     {
  9.         return isset($this->array[$offset]);
  10.     }
  11.    
  12.     public function offsetGet($offset) // retorna o elemento cujo indice é $offset
  13.     {
  14.         return $this->array[$offset];
  15.     }
  16.    
  17.     public function offsetSet($offset, $value) // atribui $value ao indice $offset
  18.     {
  19.         if ($offset)  $this->array[$offset] = $value;
  20.         else  $this->array[] = $value;
  21.     }
  22.    
  23.     public function offsetUnset($offset) // reseta o indice $offset
  24.     {
  25.         unset($this->array[$offset]);
  26.     }
  27. }
  28.  
  29. ?>

O "segredo" está na interface ArrayAccess, ela exige a implementação dos métodos offsetExists(), offsetGet(), offsetSet() e offsetUnset() que podem ser facilmente criados. Dessa forma podemos executar o seguinte código:

PHP:
  1. <?
  2.  
  3. $x = new Collection();
  4.  
  5. $x[0] = "Olá";
  6. $x[] = "Mundo!";
  7.  
  8. //echo implode(" ", $x); // isso não funciona pois o tipo do objeto $x não é um vetor
  9. //echo count($x); // isso também não funciona pois $x não é "contavel"
  10. echo $x[0]." ".$x[1];
  11.  
  12. ?>

Agora precisamos de mais um recurso muito importante: poder contar quantos elementos há nesta Collection, já que não podemos ter acesso externo a propriedade Collection::array. Basta adicionar a interface Countable e adicionar o método count().

PHP:
  1. <?
  2.  
  3. class Collection implements ArrayAccess, Countable
  4. {
  5.     protected $array = array();
  6.  
  7.     ...
  8.  
  9.     public function count()
  10.     {
  11.         return count($this->array);
  12.     }
  13. }
  14.  
  15. ?>

Agora podemos percorrer o vetor em um for:

PHP:
  1. <?
  2.  
  3. $x = new Collection();
  4.  
  5. $x[] = 1;
  6. $x[] = 2;
  7. $x[] = 4;
  8. $x[] = 8;
  9.  
  10. for($i=0; $i<count($x); $i++) // agora funciona!
  11. {
  12.     echo $x[$i]."\n";
  13. }
  14.  
  15. ?>

Bom, vou ficando por aqui, em breve escreverei um pouco mais sobre a SPL e mostrarei alguns exemplos úteis desse recurso.

Abraços!

Crie um sistema de busca eficiente

Publicado em Usabilidade, Web 2.0 por Andre Metzen, 16 de October de 2007

Não pretendo aqui abordar meios técnicos de se criar um sistema de busca eficiente. Quem deveria nos ensinar essa parte do trabalho, por motivos óbvios, é o pessoal do Google!

Então irei descrever rapidamente alguns itens importantes que acredito que possam ajudar os seus visitantes a utilizar melhor o seu sistema de busca e encontrar mais rapidamente as informações.

Porque criar um sistema de busca para meu site, se já existe o Google?

A primeira pergunta que grande parte das pessoas faria é: "Porque eu não coloco a caixinha de busca do Google pra vasculhar meu site e pronto?". Basicamente devemos considerar que por mais eficiente que sejam os mecanismos de busca existentes no mercado, nenhum deles conhece melhor seu publico e o conteúdo do seu site do que você. Deve-se levar em consideração também que há muito menos conteúdo em seu site do que em toda internet, logo isso deve fazer com que o trabalho seja mais fácil de ser realizado por você, do que por outros mecanismos.

Também deve ser levado em consideração o fato de você conhecer quais sãos as paginas de maior (e de menor) importância no seu site, ao mesmo tempo em que você tem mais acesso a meta-dados do que qualquer outro, o que faz de você a pessoa mais indicada a criar um buscador para seu site ;)

Além disso podemos citar outros detalhes que te beneficiam.

  • Confiança em seus próprios dados
  • Não há necessidade de se preocupar com pessoas tentando burlar seu sistema de busca
  • Conhecimento de seu próprio vocabulário

Acho que estes já são motivos suficientes para investir um pouco de nosso precioso tempo com o desenvolvimento de nosso próprio buscador.

O que o usuário espera de um sistema de busca?

Nada mais importante do que apresentar ao seu usuário justamente aquilo que ele espera ver! Portanto o mais importante é que você mantenha-se sempre próximo ao design e interação esperados. Ou seja, apresente claramente (preferencialmente no canto superior direito, pois é ali que os usuários normalmente a procuram) uma caixa de texto, seguido de um botão com o rotulo "pesquisar" ("buscar" também serve, mas evite expressões como "busca rápida", "ir" e etc...) que ao ser clicado deve levar o usuário a uma nova pagina com os resultados apresentados linearmente(um abaixo do outro, sequencialmente).

Além disso é importante que a caixa de busca esteja em todas as paginas, já que não podemos prever quando o visitante irá querer realizar uma busca, e não queremos lhe dar ao trabalho de voltar a pagina inicial somente para fazê-lo. Detalhes como comprimento da caixa de busca também deve ser levado em conta. É irritante você ter que voltar para ver o que foi digitado, além de incentivar os usuários a digitar consultas maiores o que normalmente leva a melhores resultados. Segundo Jakob Nielsen o ideal é uma caixa que suporte 27 caracteres (não, esse número não foi retirado da cartola mágica do tio Jakozão. Ele foi feito com base em estudos e estatísticas geradas por um grande número de pesquisas).

Busca avançada

A busca avançada pode ser realmente útil para aqueles mais experientes, mas pode ser um grande problema para os usuários mais leigos. Recursos como "e", "ou", "não" e semelhantes não costumam ser bem utilizados por estes usuários, o que pode, na maioria dos casos, prejudicar a busca e acabar tornando a experiência do usuário em algo frustrante. Um recurso comummente utilizado e que costuma ser interessante é a utilização de aptas para realizar uma busca de texto literal.

A pesquisa restrita, na qual você pode limitar a busca a uma categoria ou área especifica, é um método muitas vezes útil mas que pode acabar sendo um tiro no próprio pé. Ao mesmo tempo que faz com que o visitante consiga filtrar os resultados, este recurso pode impedir que ele encontre outros resultados que também seriam relevantes. Por exemplo uma loja que vende um livro e um DVD de um filme baseado nesse livro, se o visitante estiver restringindo a busca apenas a livros ele não não encontrará o DVD e isso pode resultar numa redução de vendas.

Apresentação dos resultados das buscas

Quando imaginamos um resultado de busca, o que nos vem a cabeça é uma lista de blocos de texto, onde cada bloco começa com um titulo em azul, com uma fonte um pouco maior e sublinhado, seguido de um pequeno paragrafo complementar. É justamente assim que você deve apresentar os resultados. Além disso nada mais claro do que colocar os resultados mais relevantes em cima.

Se nenhum resultado é encontrado devemos deixar claro que não foi retornado nenhum item com as palavras-chaves que ele digitou, e preferencialmente oferecer opções para que ele possa corrigir a consulta ou oferecer dicas de como melhora-las. Nunca, jamais, nem em sonho, deixe a pagina em branco! A não ser que você queira que seu visitante fique esperando indefinidamente os resultados aparecerem magicamente.

Bom, acho que por enquanto é isso, se vocês tiverem alguma critica, ou sugestão, é só deixar um comentário.

Abraços.