Qué hace esta herramienta
Una muestra JSON pasa a ser clases de PHP con propiedades promovidas al constructor.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
<?php
declare(strict_types=1);
class Root
{
public function __construct(
public int $id,
public string $firstName,
public Address $address,
) {
}
}
La promoción de propiedades pide PHP 8.0; el ajuste readonly pide 8.1. El declare(strict_types=1) está ahí a propósito: sin él, PHP convertiría sin ruido una cadena en un parámetro int, y perderías el control que los tipos debían darte.
Una propiedad renombrada conserva su clave
Los nombres de propiedad van en camelCase aquí: una clave con guion o que empiece por dígito no sobrevive como nombre. Cuando eso pasa, la clave se escribe al lado:
/** JSON key: "content-type" */
public string $contentType,
public int $fooBar,
/** JSON key: "foo-bar" */
public int $fooBar2,
Ese último par es la razón: fooBar y foo-bar quieren ambos $fooBar, así que el segundo pasa a $fooBar2, y sin el comentario nada en el archivo decía cuál venía de cuál. PHP no tiene un atributo estándar que lo lleve: lo lleva un comentario, y solo donde el nombre ya no lleva la clave.
Era una carencia real, encontrada al escribir esta página: PHP era el único de estos generadores que perdía la clave por completo. Go tiene su tag, Java y C# su anotación, Swift sus CodingKeys, Dart su fromJson.
Lo que PHP no sabe estrechar
arraypara toda lista. El lenguaje no tiene genéricos;list<string>vive en un docblock de PHPStan o Psalm, y cuál usas no es algo que una muestra pueda saber.mixedparanully los valores desconocidos. Es el tipo honesto: lo acepta todo, ydeclare(strict_types=1)no te salvará ahí. Estréchalo en cuanto el campo tenga un tipo real.- Un escalar en la raíz se rechaza. PHP no tiene alias de tipo:
42o"texto"no tiene en qué convertirse.
Lo que una muestra no puede decir
Ninguna propiedad admite nulos y ninguna tiene valor por defecto: el documento traía un valor para cada una. ?string y = null son los retoques que harás cuando una segunda carga muestre que la clave puede faltar, y readonly merece activarse si estos objetos están hechos para leerse, no para rellenarse.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.