Pular para o conteúdo

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.
Isaque Vieira de Sousa Alves isaque_alves
Hits: 8.474 Categoria: PHP Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Versões atualizadas deste script

Isaque Vieira de Sousa Alves

Versão 2 enviada 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.
    }
}


?>
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Valor por extenso - PHP e ZF2

Mostra a quantidade dos dias da semana em intervalo

Consulta Amazon! Buscas na Web

Sistema vendas PHP/Mysql

video aleatórias no seu site..youtube

#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

Entre na sua conta para comentar.