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"
}
]