O que esta ferramenta faz
Uma amostra JSON vira classes PHP com propriedades promovidas ao construtor.
{ "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,
) {
}
}
A promoção de propriedades pede PHP 8.0; o ajuste readonly pede 8.1. O declare(strict_types=1) está ali de propósito: sem ele, o PHP converteria sem ruído uma string num parâmetro int, e você perderia justamente a checagem que os tipos deviam dar.
Uma propriedade renomeada guarda a sua chave
Os nomes de propriedade aqui vão em camelCase: uma chave com hífen ou começando por dígito não sobrevive como nome. Quando isso acontece, a chave é escrita ao lado:
/** JSON key: "content-type" */
public string $contentType,
public int $fooBar,
/** JSON key: "foo-bar" */
public int $fooBar2,
Esse último par é a razão: fooBar e foo-bar querem ambos $fooBar, então o segundo vira $fooBar2 — e sem o comentário nada no arquivo dizia qual vinha de qual. O PHP não tem atributo padrão para carregar isso: carrega um comentário, e só onde o nome já não carrega a chave.
Era uma falta real, encontrada ao escrever esta página: o PHP era o único desses geradores a perder a chave por completo. O Go tem a sua tag, o Java e o C# a sua anotação, o Swift as suas CodingKeys, o Dart o seu fromJson.
O que o PHP não consegue estreitar
arraypara toda lista. A linguagem não tem genéricos;list<string>mora num docblock de PHPStan ou Psalm, e qual deles você usa não é algo que uma amostra saiba.mixedparanulle os valores desconhecidos. É o tipo honesto: aceita tudo, edeclare(strict_types=1)não te salva ali. Estreite-o assim que o campo tiver um tipo de verdade.- Um escalar na raiz é recusado. O PHP não tem alias de tipo:
42ou"texto"não tem no que virar.
O que uma amostra não consegue dizer
Nenhuma propriedade aceita nulo e nenhuma tem valor padrão: o documento trazia um valor para cada uma. ?string e = null são os retoques a fazer quando uma segunda carga mostrar que a chave pode faltar — e readonly vale a pena se esses objetos existem para ser lidos, não preenchidos.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.