Mapeamento dinâmico de dados em PHP
Publicado por Isaque Vieira de Sousa Alves (última atualização em 20/01/2010)
[ Hits: 8.343 ]
Homepage: www.isaquealves.com
Download 1263483399.Map.php (versão 2)
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.
Versão 2 - Enviado 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.
<?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.
}
}
?>
Monitoramento simples de servidores [versão 1.0] (corrigido)
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Instalação do cosmic no archlinux (0)
Formas seguras de instalar Debian Sid [RESOLVIDO] (14)









