Helper Serializer


1Apresentação

Este helper é usado para serializar e desserializar dados nos formatos JSON, INI, YAML, NEON e XML, além do PHP.


2Dependências

Para usar o formato NEON, você deve primeiro instalar a dependência nette/neon:

composer require nette/neon

3Desserialização a partir de uma string

3.1decode()

decode(string $stream, string|array $types=[self::PHP, self::JSON, self::INI, self::YAML, self::NEON, self::XML]) : mixed

Desserializa uma string de caracteres cujo formato é passado como segundo parâmetro.

O segundo parâmetro pode receber um dos valores \Temma\Utils\Serializer::PHP, \Temma\Utils\Serializer::JSON, \Temma\Utils\Serializer::INI, \Temma\Utils\Serializer::YAML, \Temma\Utils\Serializer::NEON, \Temma\Utils\Serializer::XML.

Ele também pode receber uma lista desses valores. Nesse caso, os diversos formatos listados são testados, até que um funcione.

Exemplo:

use \Temma\Utils\Serializer as TµSerializer;

// lê uma string JSON
$input = '{"aa": "bb"}';
$data = TµSerializer::decode($input, TµSerializer::JSON);

// lê uma string que pode estar em JSON ou YAML
$data = TµSerializer::decode($input, [TµSerializer::JSON, TµSerializer::YAML]);

3.2decodePhp()

decodePhp(string $stream) : mixed

Desserializa uma string PHP.


3.3decodeJson()

decodeJson(string $stream) : mixed

Desserializa uma string JSON.


3.4decodeIni()

decodeIni(string $stream) : mixed

Desserializa uma string INI.


3.5decodeYaml()

decodeYaml(string $stream) : mixed

Desserializa uma string YAML.


3.6decodeNeon()

decodeNeon(string $stream) : mixed

Desserializa uma string NEON.


3.7decodeXml()

decodeXml(string $stream) : mixed

Desserializa uma string XML.


4Desserialização a partir de um arquivo

4.1readFromPrefix()

readFromPrefix(string $prefixPath, array $types=[self::PHP, self::JSON, self::INI, self::YAML, self::NEON, self::XML]) : mixed

Este método procura um arquivo cujo nome comece com a string passada no primeiro parâmetro, sem sua extensão. A extensão é adicionada automaticamente para encontrar o arquivo, usando a lista passada como segundo parâmetro. O conteúdo do arquivo é desserializado de acordo com o tipo encontrado.

Exemplo:

use \Temma\Utils\Serializer as TµSerializer;

// lê um arquivo chamado 'foo.php' ou 'foo.json', 'foo.ini', 'foo.yaml', 'foo.neon', 'foo.xml'
$data = TµSerializer::readFromPrefix('foo');

// lê um arquivo chamado 'foo.json' ou 'foo.yaml'
$data = TµSerializer::readFromPrefix('foo', [TµSerializer::JSON, TµSerializer::YAML]);

4.2read()

read(string $path, ?string $type=null) : mixed

Desserializa o conteúdo do arquivo cujo caminho é passado como primeiro parâmetro. O segundo parâmetro pode receber o formato de serialização; se deixado nulo, o formato é detectado a partir da extensão do arquivo.

Exemplo:

// lê um arquivo INI
$data = TµSerializer::read('toto.ini');

// lê um arquivo XML
$data = TµSerializer::read('toto.txt', TµSerializer::XML);

4.3readPhp()

readPhp(string $path) : mixed

Desserializa um arquivo PHP.


4.4readJson()

readJson(string $path) : mixed

Desserializa um arquivo JSON.


4.5readIni()

readIni(string $path) : mixed

Desserializa um arquivo INI.


4.6readYaml()

readYaml(string $path) : mixed

Desserializa um arquivo YAML.


4.7readNeon()

readNeon(string $path) : mixed

Desserializa um arquivo NEON.


4.8readXml()

readXml(string $path) : mixed

Desserializa um arquivo XML.


5Serialização para uma string

5.1encode()

encode(mixed $data, string $type) : string

Serializa os dados passados no primeiro parâmetro, no formato passado no segundo parâmetro.

O segundo parâmetro pode receber os valores \Temma\Utils\Serializer::PHP, \Temma\Utils\Serializer::JSON, \Temma\Utils\Serializer::INI, \Temma\Utils\Serializer::YAML, \Temma\Utils\Serializer::NEON, \Temma\Utils\Serializer::XML.

Exemplo:

use \Temma\Utils\Serializer as TµSerializer;

$json = TµSerializer::encode($data, TµSerializer::JSON);

5.2encodePhp()

encodePhp(mixed $data) : string

Serializa dados em código PHP.


5.3encodeJson()

encodeJson(mixed $data, bool $prettyPrint=true) : string

Serializa dados no formato JSON. Se o segundo parâmetro for definido como false, o fluxo JSON fica em uma única linha (sem quebras de linha ou indentação).


5.4encodeIni()

encodeIni(mixed $data) : string

Serializa dados no formato INI.


5.5encodeYaml()

encodeYaml(mixed $data) : string

Serializa dados no formato YAML.


5.6encodeNeon()

encodeNeon(mixed $data) : string

Serializa dados no formato NEON.


5.7encodeXml()

encodeXml(mixed $data, bool $prettyPrint=true) : string

Serializa dados no formato XML. Se o segundo parâmetro for definido como false, o fluxo XML fica sem indentação.


6Serialização para um arquivo

6.1write()

write(string $path, mixed $data, ?string $type=null) : void

Serializa os dados passados no segundo parâmetro, e os grava no arquivo cujo caminho é fornecido no primeiro parâmetro. O formato de serialização pode ser fornecido como terceiro parâmetro; se omitido, ele é deduzido a partir da extensão do arquivo gravado (.php para serialização em código PHP, .json para o formato JSON, .ini para o formato INI, .yaml para o formato YAML, .neon para o formato NEON, .xml para o formato XML).

O terceiro parâmetro pode receber os valores \Temma\Utils\Serializer::PHP, \Temma\Utils\Serializer::JSON, \Temma\Utils\Serializer::INI, \Temma\Utils\Serializer::YAML, \Temma\Utils\Serializer::NEON, \Temma\Utils\Serializer::XML.


6.2writePhp()

writePhp(string $path, mixed $data) : void

Serializa dados em um arquivo PHP.


6.3writeJson()

writeJson(string $path, mixed $data, bool $prettyPrint=true) : void

Serializa dados em um arquivo JSON. Se o terceiro parâmetro for definido como false, o fluxo JSON fica em uma única linha (sem quebras de linha ou indentação).


6.4writeIni()

writeIni(string $path, mixed $data) : void

Serializa dados em um arquivo INI.


6.5writeYaml()

writeYaml(string $path, mixed $data) : void

Serializa dados em um arquivo YAML.


6.6writeNeon()

writeNeon(string $path, mixed $data) : void

Serializa dados em um arquivo NEON.


6.7writeXml()

writeXml(string $path, mixed $data, bool $prettyPrint=true) : void

Serializa dados em um arquivo XML. Se o terceiro parâmetro for definido como false, o fluxo XML fica sem indentação.


7Formatos de serialização

Este objeto suporta os formatos padrão INI, YAML, NEON e XML. Alguns recursos específicos são suportados para os formatos PHP e JSON.


7.1PHP

A desserialização PHP é capaz de ler um arquivo PHP ou uma string PHP contendo uma instrução return.

Exemplo de um arquivo interpretável:

<?php

return [
	'abc' => 'def',
	'ghi' => 999,
];

Exemplo de uma string interpretável:

"return [12, 23, 34];"

7.2JSON

A desserialização JSON é capaz de interpretar arquivos ou strings contendo um fluxo JSON. Esse fluxo JSON pode conter comentários de linha única (// ...) e comentários de várias linhas (/* ... */).

Exemplo de um arquivo interpretável:

/*
 * Lista de usuários
 */
[
    // administrador
    {
        "name": "Alice",
        "role": "admin"
    },
    // gerente
    {
        "name": "Bob",
        "role": "manager"
    }
]