Mapeamento dinâmico de dados em PHP
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.
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.
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.
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.
Versões atualizadas deste script
<?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.
}
}
?>
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...