Helper Serializer


1Presentación

Este helper se usa para serializar y deserializar datos en los formatos PHP, JSON, INI, YAML, NEON y XML.


2Dependencias

Para usar el formato NEON, primero debes instalar la dependencia nette/neon:

composer require nette/neon

3Deserialización a partir de una cadena

3.1decode()

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

Deserializa una cadena de caracteres cuyo formato se pasa como segundo parámetro.

El segundo parámetro puede recibir uno de los 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.

También puede recibir una lista de estos valores. En ese caso, se van probando los diferentes formatos indicados, hasta que uno funcione.

Ejemplo:

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

// lee una cadena JSON
$input = '{"aa": "bb"}';
$data = TµSerializer::decode($input, TµSerializer::JSON);

// lee una cadena que podría estar en JSON o YAML
$data = TµSerializer::decode($input, [TµSerializer::JSON, TµSerializer::YAML]);

3.2decodePhp()

decodePhp(string $stream) : mixed

Deserializa una cadena PHP.


3.3decodeJson()

decodeJson(string $stream) : mixed

Deserializa una cadena JSON.


3.4decodeIni()

decodeIni(string $stream) : mixed

Deserializa una cadena INI.


3.5decodeYaml()

decodeYaml(string $stream) : mixed

Deserializa una cadena YAML.


3.6decodeNeon()

decodeNeon(string $stream) : mixed

Deserializa una cadena NEON.


3.7decodeXml()

decodeXml(string $stream) : mixed

Deserializa una cadena XML.


4Deserialización a partir de un archivo

4.1readFromPrefix()

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

Este método busca un archivo cuyo nombre empiece por la cadena pasada en el primer parámetro, sin su extensión. La extensión se añade automáticamente para encontrar el archivo, usando la lista pasada como segundo parámetro. El contenido del archivo se deserializa según el tipo encontrado.

Ejemplo:

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

// lee un archivo llamado 'foo.php' o 'foo.json', 'foo.ini', 'foo.yaml', 'foo.neon', 'foo.xml'
$data = TµSerializer::readFromPrefix('foo');

// lee un archivo llamado 'foo.json' o 'foo.yaml'
$data = TµSerializer::readFromPrefix('foo', [TµSerializer::JSON, TµSerializer::YAML]);

4.2read()

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

Deserializa el contenido del archivo cuya ruta se pasa como primer parámetro. El segundo parámetro puede recibir el formato de serialización; si se deja en null, el formato se detecta a partir de la extensión del archivo.

Ejemplo:

// lee un archivo INI
$data = TµSerializer::read('toto.ini');

// lee un archivo XML
$data = TµSerializer::read('toto.txt', TµSerializer::XML);

4.3readPhp()

readPhp(string $path) : mixed

Deserializa un archivo PHP.


4.4readJson()

readJson(string $path) : mixed

Deserializa un archivo JSON.


4.5readIni()

readIni(string $path) : mixed

Deserializa un archivo INI.


4.6readYaml()

readYaml(string $path) : mixed

Deserializa un archivo YAML.


4.7readNeon()

readNeon(string $path) : mixed

Deserializa un archivo NEON.


4.8readXml()

readXml(string $path) : mixed

Deserializa un archivo XML.


5Serialización a una cadena

5.1encode()

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

Serializa los datos pasados en el primer parámetro, en el formato pasado en el segundo parámetro.

El segundo parámetro puede recibir los 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.

Ejemplo:

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

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

5.2encodePhp()

encodePhp(mixed $data) : string

Serializa datos en código PHP.


5.3encodeJson()

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

Serializa datos en formato JSON. Si el segundo parámetro se define como false, el flujo JSON queda en una sola línea (sin saltos de línea ni sangría).


5.4encodeIni()

encodeIni(mixed $data) : string

Serializa datos en formato INI.


5.5encodeYaml()

encodeYaml(mixed $data) : string

Serializa datos en formato YAML.


5.6encodeNeon()

encodeNeon(mixed $data) : string

Serializa datos en formato NEON.


5.7encodeXml()

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

Serializa datos en formato XML. Si el segundo parámetro se define como false, el flujo XML queda sin sangría.


6Serialización a un archivo

6.1write()

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

Serializa los datos pasados en el segundo parámetro, y los escribe en el archivo cuya ruta se indica en el primer parámetro. El formato de serialización se puede indicar como tercer parámetro; si se omite, se deduce a partir de la extensión del archivo escrito (.php para serialización en código PHP, .json para el formato JSON, .ini para el formato INI, .yaml para el formato YAML, .neon para el formato NEON, .xml para el formato XML).

El tercer parámetro puede recibir los 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 datos en un archivo PHP.


6.3writeJson()

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

Serializa datos en un archivo JSON. Si el tercer parámetro se define como false, el flujo JSON queda en una sola línea (sin saltos de línea ni sangría).


6.4writeIni()

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

Serializa datos en un archivo INI.


6.5writeYaml()

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

Serializa datos en un archivo YAML.


6.6writeNeon()

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

Serializa datos en un archivo NEON.


6.7writeXml()

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

Serializa datos en un archivo XML. Si el tercer parámetro se define como false, el flujo XML queda sin sangría.


7Formatos de serialización

Este objeto soporta los formatos estándar INI, YAML, NEON y XML. Algunas funciones específicas son compatibles con los formatos PHP y JSON.


7.1PHP

La deserialización PHP puede leer un archivo PHP o una cadena PHP que contenga una instrucción return.

Ejemplo de un archivo interpretable:

<?php

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

Ejemplo de una cadena interpretable:

"return [12, 23, 34];"

7.2JSON

La deserialización JSON puede interpretar archivos o cadenas que contengan un flujo JSON. Este flujo JSON puede contener comentarios de una sola línea (// ...) y comentarios multilínea (/* ... */).

Ejemplo de un archivo interpretable:

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