Descrição
Criei esta classe para simplificar meu trabalho na hora de guardar registros de documentos de usuários cadastrados em um sistema online.
O uso é simples e fácil. Eu o uso como uma superclasse para outras classes.
class Documents extends Map {
...
}
A parte de validação dos documentos é independente da classe, e a forma de armazenamento também. Fica fácil usar serialização assim.
[ Download:
Map.php ]
[
Enviar nova versão ]
Versões atualizadas deste script (NOVO)
Publicado por Isaque Vieira de Sousa Alves em 14/01/2010
Changelog: Alteração em alguns métodos para correção de comportamento inadequado.
Método __set: Insere uma nova chave e faz uma atribuição consequente.
Método put: Faz uma atribuição à chave informada com o valor, ambos passados como argumento.
Método remove: Executa a função unset do PHP sobre a chave passada como argumento.
[ Esconder código-fonte ]
<?php
/*
* Map.php
*/
/**
* Map
* Classe que possibilita a criação de um mapa semelhante aos gerados pela classe java.util.Map.
* Possui os métodos put, get, replaceKeyValue, remove.
*
* @author Isaque Alves <isaquealves + gmail . com>
*/
class Map {
private $_mapStructrure;
/**
* Construtor da Classe
*/
public function __construct($defStructure = null) {
if($defStructure != null)
$this->_mapStructrure = $defStructure;
else
$this->_mapStructrure = array();
}
/**
*
* @param mixed $key
* @param mixed $value
*/
public function __set($key, $value) {
array_push($this->_mapStructrure,$key);
if(array_key_exists($key, $this->_mapStructrure))
{
$this->_mapStructrure[$key] = $value;
}
}
/**
*
* @param mixed $var
* @return mixed
*/
public function __get($var)
{
if(isset($this->_mapStructrure[$var]))
{
return $this->_mapStructrure[$var];
}
elseif(method_exists($this, $var))
{
return $this->var();
}
else
{
throw new Exception("Esta propriedade ($var) nao existe em objetos deste tipo : " . __CLASS__);
}
}
/**
*
* @param mixed $key
* @param mixed $value
*/
public function put($key, $value) {
array_push($this->_mapStructrure,$key);
if(array_key_exists($key, $this->_mapStructrure))
{
$this->_mapStructrure[$key] = $value;
}
}
/**
*
* @return array
*/
public function getAllStoredData()
{
return $this->_mapStructrure;
}
/**
*
* @param mixed $key
* @return mixed
*/
public function get($key)
{
if(array_key_exists($key, $this->_mapStructrure))
return $this->_mapStructrure[$key];
else
throw new Exception("Este mapa nao contem nenhuma chave com o nome $var : ");
}
/**
*
* @param mixed $key
* @param mixed $newValue
*/
public function replaceKeyValue($key,$newValue)
{
if(array_key_exists($key, $this->_mapStructrure))
{
$this->_mapStructrure[$key] = $newValue;
}
}
/**
*
* @param mixed $key
*/
public function remove($key)
{
$this->_mapStructrure[$key] = null;//torna nulo o valor da chave a ser removida
$tmpArray1 = array();
for($i=0; $i < array_count_values($this->_mapStructrure); $i++)
{
if($this->_mapStructrure[$key] != null) {
array_push($tmpArray1,$this->_mapStructrure[$key]); // para toda chave cujo valor seja não-nulo, adicione-a a um array temporário
}
}
$this->_mapStructrure = $tmpArray1; // atualize a referencia.
}
}
?>
Scripts recomendados
Calsse eveFile: manipulação de arquivos
FormConstructor: Formulário Construído por Variável
Jpgraph e mysql
Previsão do tempo para Porto Alegre/RS
Guestbook sem instalação
Comentários
[1] Comentário enviado por
isaque_alves em 11/01/2010 - 17:03h:
Ops...
Cometi um erro crasso... mandei pra fila de espera antes de testar... tem alguns errinhos... E agora, as correções:
Método put:
/**
*
* @param mixed $key
* @param mixed $value
*/
public function put($key, $value) {
$this->_mapStructrure[$key] = $value;
}
Método remove:
/**
*
* @param mixed $key
*/
public function remove($key)
{
unset($this->_mapStructrure[$key]);
}
O problema com o put era que eu estava criando um array com os valores de $key... daí não dava pra adicionar nada tendo como chave $key...
e com remove, tava fazendo mais trabalho que o necessário... basta unset...
O resto tá bacana...
[2] Comentário enviado por
albertguedes em 13/01/2010 - 13:52h:
Nessas horas que a gente precisa de um svn no VOL hehehe.
Mas valeu pelo script, mão na roda.