Che cosa fa questo strumento
Un campione JSON diventa classi PHP con proprietà promosse nel costruttore.
{ "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 promozione delle proprietà richiede PHP 8.0; l’impostazione readonly richiede 8.1. Il declare(strict_types=1) è lì apposta: senza, PHP convertirebbe in silenzio una stringa in un parametro int, e perderesti proprio il controllo per cui i tipi esistono.
Una proprietà rinominata conserva la sua chiave
Qui i nomi delle proprietà sono in camelCase: una chiave con trattino o che inizia con una cifra non sopravvive come nome. Quando succede, la chiave è scritta accanto:
/** JSON key: "content-type" */
public string $contentType,
public int $fooBar,
/** JSON key: "foo-bar" */
public int $fooBar2,
Quest’ultima coppia è la ragione: fooBar e foo-bar vogliono entrambi $fooBar, quindi il secondo diventa $fooBar2 — e senza il commento nulla nel file diceva quale venisse da quale. PHP non ha un attributo standard che lo porti: lo porta un commento, e solo dove il nome non porta più la chiave.
Era una mancanza vera, trovata scrivendo questa pagina: PHP era l’unico di questi generatori a perdere del tutto la chiave. Go ha il suo tag, Java e C# la loro annotazione, Swift le sue CodingKeys, Dart il suo fromJson.
Ciò che PHP non sa restringere
arrayper ogni lista. Il linguaggio non ha generici;list<string>vive in un docblock di PHPStan o Psalm, e quale usi non è qualcosa che un campione possa sapere.mixedpernulle i valori ignoti. È il tipo onesto: accetta tutto, edeclare(strict_types=1)lì non ti salva. Restringilo appena il campo ha un tipo vero.- Uno scalare alla radice è rifiutato. PHP non ha alias di tipo:
42o"testo"non ha in cosa diventare.
Ciò che un campione non può dire
Nessuna proprietà è annullabile e nessuna ha un valore predefinito: il documento aveva un valore per ciascuna. ?string e = null sono le modifiche da fare quando un secondo carico mostra che la chiave può mancare — e readonly vale la pena se questi oggetti sono fatti per essere letti, non riempiti.
Privato per progettazione
Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.