Ce que fait cet outil
Un échantillon JSON devient des classes PHP à propriétés promues au constructeur.
{ "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 promotion de propriétés demande PHP 8.0 ; le réglage readonly demande 8.1. Le declare(strict_types=1) est là exprès : sans lui, PHP convertirait sans bruit une chaîne en paramètre int, et vous perdriez le contrôle que les types devaient vous donner.
Une propriété renommée garde sa clé
Les noms de propriétés sont en camelCase ici : une clé à tiret ou commençant par un chiffre ne survit donc pas comme nom. Quand cela arrive, la clé est écrite à côté :
/** JSON key: "content-type" */
public string $contentType,
public int $fooBar,
/** JSON key: "foo-bar" */
public int $fooBar2,
Cette dernière paire en est la raison : fooBar et foo-bar veulent tous deux $fooBar, le second devient donc $fooBar2 — et sans le commentaire, rien dans le fichier ne disait laquelle venait de laquelle. PHP n’a pas d’attribut standard pour porter cela : un commentaire le fait, et seulement là où le nom ne porte plus la clé.
C’était un vrai manque, trouvé en écrivant cette page : PHP était le seul de ces générateurs à perdre la clé entièrement. Go a son tag, Java et C# leur annotation, Swift ses CodingKeys, Dart son fromJson.
Ce que PHP ne sait pas restreindre
arraypour toute liste. Le langage n’a pas de génériques ;list<string>vit dans un docblock PHPStan ou Psalm, et lequel vous employez n’est pas quelque chose qu’un échantillon puisse savoir.mixedpournullet les valeurs inconnues. C’est le type honnête : il accepte tout, etdeclare(strict_types=1)ne vous sauvera pas là. Restreignez-le dès que le champ a un vrai type.- Un scalaire à la racine est refusé. PHP n’a pas d’alias de type :
42ou"texte"n’a rien à devenir.
Ce qu’un échantillon ne peut pas dire
Aucune propriété n’est nullable et aucune n’a de valeur par défaut : le document avait une valeur pour chacune. ?string et = null sont les retouches à faire quand une seconde charge montre que la clé peut manquer — et readonly vaut la peine d’être activé si ces objets sont faits pour être lus, pas remplis.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.