Was dieses Werkzeug tut
Aus einer JSON-Probe werden PHP-Klassen mit im Konstruktor beförderten Eigenschaften.
{ "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,
) {
}
}
Die Beförderung von Eigenschaften braucht PHP 8.0, der readonly-Schalter 8.1. Das declare(strict_types=1) steht mit Absicht da: ohne es würde PHP eine Zeichenkette klaglos in einen int-Parameter wandeln, und Sie verlören genau die Prüfung, für die die Typen da sind.
Eine umbenannte Eigenschaft behält ihren Schlüssel
Eigenschaftsnamen stehen hier in camelCase: ein Schlüssel mit Bindestrich oder führender Ziffer übersteht das nicht als Name. Passiert das, steht der Schlüssel daneben:
/** JSON key: "content-type" */
public string $contentType,
public int $fooBar,
/** JSON key: "foo-bar" */
public int $fooBar2,
Dieses letzte Paar ist der Grund: fooBar und foo-bar wollen beide $fooBar, das zweite wird also $fooBar2 — und ohne den Kommentar sagte nichts in der Datei, welches von welchem kam. PHP hat kein standardisiertes Attribut, das das trüge, also trägt es ein Kommentar, und nur dort, wo der Name den Schlüssel nicht mehr trägt.
Das war eine echte Lücke, beim Schreiben dieser Seite gefunden: PHP war der einzige dieser Generatoren, der den Schlüssel vollständig verlor. Go hat seinen Tag, Java und C# ihre Annotation, Swift seine CodingKeys, Dart sein fromJson.
Was PHP nicht einengen kann
arrayfür jede Liste. Die Sprache hat keine Generics;list<string>lebt in einem PHPStan- oder Psalm-Docblock, und welchen Sie nutzen, kann eine Probe nicht wissen.mixedfürnullund unbekannte Werte. Der ehrliche Typ: er nimmt alles, unddeclare(strict_types=1)rettet Sie dort nicht. Engen Sie ihn ein, sobald das Feld einen echten Typ hat.- Ein Skalar an der Wurzel wird abgelehnt. PHP hat keinen Typalias,
42oder"Text"hat also nichts, was es werden könnte.
Was eine Probe nicht sagen kann
Keine Eigenschaft ist nullbar und keine hat einen Vorgabewert: das Dokument hatte für jede einen Wert. ?string und = null sind die Änderungen, sobald eine zweite Nutzlast zeigt, dass der Schlüssel fehlen darf — und readonly lohnt sich, wenn diese Objekte gelesen und nicht befüllt werden sollen.
Datenschutz ab Werk
Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.