Mapeamento dinâmico de dados em PHP

Publicado por Isaque Vieira de Sousa Alves (última atualização em 20/01/2010)

[ Hits: 8.062 ]

Homepage: www.isaquealves.com

Download Map.php

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ões atualizadas deste script

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.

Download 1263483399.Map.php


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

Receber atualização de encomendas do correios em seu e-mail

Validação de CPF usando PHP

Retornar o último dia do Mês

Cron - Classe PHP para cálculo da diferença entre duas datas

Previsão do tempo para Porto Alegre/RS


  

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.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts