Php Serialização
Tags: php, serialização, desserialização
Published: 2024-05-31 19:16:58

# Serialização e Desserialização em PHP

## O que é Serialização?

Serialização é o processo de converter um objeto ou uma estrutura de dados em uma string. Esta string pode ser armazenada em um arquivo, transmitida pela rede ou armazenada em um banco de dados. A principal vantagem da serialização é que ela permite salvar o estado de um objeto de uma forma que possa ser facilmente recuperada mais tarde.

## O que é Desserialização?

Desserialização é o processo inverso da serialização. Ela converte uma string serializada de volta em um objeto ou estrutura de dados original. Isso é útil para recuperar o estado de um objeto que foi salvo anteriormente.

## Funções de Serialização em PHP

PHP fornece funções embutidas para serialização e desserialização:

### `serialize()`

A função `serialize()` converte um valor PHP em uma string serializada.

```php
$dados = array('nome' => 'João', 'idade' => 30);
$string_serializada = serialize($dados);
echo $string_serializada;
```

Saída:
```
a:2:{s:4:"nome";s:4:"João";s:5:"idade";i:30;}
```

### `unserialize()`

A função `unserialize()` converte uma string serializada de volta ao seu valor original.

```php
$string_serializada = 'a:2:{s:4:"nome";s:4:"João";s:5:"idade";i:30;}';
$dados = unserialize($string_serializada);
print_r($dados);
```

Saída:
```
Array
(
    [nome] => João
    [idade] => 30
)
```

## Casos de Uso Comuns

### Armazenamento de Sessões

A serialização é frequentemente usada para armazenar dados de sessão. Quando um utilizador faz login em um site, seus dados podem ser armazenados em uma sessão usando `serialize()`. Quando o utilizador retorna, os dados da sessão podem ser recuperados com `unserialize()`.

### Cache de Dados

Serialização é útil para cache de dados complexos. Por exemplo, uma resposta de API pode ser serializada e armazenada em cache para evitar fazer a mesma chamada repetidamente.

### Persistência de Objetos

Objetos em PHP podem ser serializados e armazenados em um banco de dados. Quando necessário, eles podem ser recuperados e desserializados para restaurar seu estado original.

## Considerações de Segurança

Ao utilizar `unserialize()`, é importante ter cuidado, especialmente com dados vindos de fontes não confiáveis. Um dado malicioso pode explorar vulnerabilidades no código e levar à execução de código arbitrário. Portanto, evite desserializar dados não confiáveis ou valide e sanitize adequadamente os dados antes de desserializar.

## Exemplo Prático

Aqui está um exemplo completo de serialização e desserialização de um objeto.

### Classe Exemplo

```php
class Pessoa {
    public $nome;
    public $idade;

    public function __construct($nome, $idade) {
        $this->nome = $nome;
        $this->idade = $idade;
    }
}

// Criar um objeto
$pessoa = new Pessoa("Maria", 25);

// Serializar o objeto
$serializado = serialize($pessoa);
echo "Serializado: " . $serializado . "\n";

// Desserializar o objeto
$pessoa_desserializada = unserialize($serializado);
echo "Desserializado: " . $pessoa_desserializada->nome . ", " . $pessoa_desserializada->idade . "\n";
```

### Saída

```
Serializado: O:6:"Pessoa":2:{s:4:"nome";s:5:"Maria";s:5:"idade";i:25;}
Desserializado: Maria, 25
```

## Conclusão

A serialização e desserialização em PHP são técnicas poderosas para persistir e transmitir dados. Ao entender e utilizar corretamente `serialize()` e `unserialize()`, você pode facilmente salvar e restaurar o estado de dados complexos em suas aplicações PHP.