Plak PHP links en klik op "Converteren" — we maken er XML vanPlak PHP-code

Wat deze tool doet

Als je ooit met de hand een XML-payload in elkaar hebt moeten zetten voor een PHP SoapClient-aanroep, een WordPress-plugin-export of een oude partnerintegratie die nog steeds XML spreekt, weet je hoeveel monnikenwerk dat is. Plak de PHP hier en je krijgt in één keer goed-gevormde XML terug. Een klasse met constructor promotion, een heel value-object-bestand of een gevulde instantie — zelfde resultaat: een compleet XML-document waar elke property bewaard blijft.

Het is geen blind string-vervangen. De converter leest modern PHP 8+ zoals het hoort: via de constructor gepromoveerde properties gedragen zich als gedeclareerde, readonly-velden komen als gewone elementen door, getypeerde properties (string, int, float, bool) behouden hun types, DateTimeInterface-waarden worden gerenderd als ISO-8601-strings, null wordt een leeg element (in plaats van weggelaten), en arrays worden containerelementen met één child per entry — zoals SimpleXMLElement of DOMDocument doorgaans zouden produceren.

Klassestructuur en metadata worden gerespecteerd. Elke top-level klasse wordt een root-element met de naam van de klasse, public properties worden childelementen in declaratievolgorde, geneste value objects worden inline uitgevouwen, en array-properties worden wrapperelementen. PHP-attributen als #[XmlRoot("x")] of docblock-tags als @XmlElement("x") hernoemen elementen waar je ze opgeeft. Plak een Laravel Eloquent-model, een Symfony Serializer-DTO of een gewone value object — de XML komt eruit zoals een handgeschreven SoapVar of een SOAP-request-body eruit zou zien.

Zo gebruik je het

Drie stappen. Zelfde flow of je nu één klasse plakt of de hele <code>src/Entity</code>-map.

1

Plak je PHP (of probeer het voorbeeld)

Gooi je PHP in de linker editor zoals hij is. Een klasse met constructor promotion, een readonly value object, meerdere klassen of een gevulde instantie — allemaal prima. Klik op Voorbeeld laden om eerst een realistisch Order-voorbeeld te zien.

Je hoeft de <?php-tag niet te verwijderen, geen namespaces te strippen en geen docblocks te wissen. Laat de code zoals hij in je IDE staat. Gewoon plakken.

2

Klik op Converteren

Klik op de groene Converteren-knop. De tool leest de PHP, behoudt elke klasse en property en bouwt de XML in één keer. Een kort glimmertje laat zien dat het bezig is.

3

Kopieer de XML

Het rechter paneel vult zich met ingesprongen, goed-gevormde XML die elke standaardconforme parser accepteert. Plak het in een SoapClient-request, een PHPUnit-fixture, een WordPress-exportbestand of een API-docvoorbeeld.

Wanneer dit echt handig is

SoapClient-request-fixtures bouwen

Je praat via <code>SoapClient</code> met een legacy SOAP-endpoint en hebt een request-body nodig die bij een PHP-klasse past. Plak de klasse, neem de XML, wikkel die in <code>SoapVar</code> of geef hem aan <code>__doRequest()</code>.

WordPress/Drupal XML-exports

Een custom-post-type-klasse of Drupal-entity met 20 velden wordt een direct-klaar-om-te-bewerken WXR- of XML-export-template — geen handmatig in elkaar zetten van elementstructuren meer om bij de PHP-vorm aan te sluiten.

XML-responses in Symfony/Laravel

Je API geeft meestal JSON terug maar één client wil nog steeds XML. Plak de DTO, pak de XML-envelop, zet het in een Symfony Response- of Laravel ResponseFactory-voorbeeld en ga door.

PHPUnit-fixtures en snapshot-tests

Zet value-object-instanties uit je unit-tests om in XML-fixturebestanden voor integratietests, contracttests of gemockte SOAP-servers — zonder op het oog een passende XML-template te schrijven.

Veelgestelde vragen

Gaat het overweg met constructor promotion en readonly properties?

Ja. Via de constructor gepromoveerde parameters (public string $orderId binnen __construct) worden childelementen net als gedeclareerde properties. readonly wordt bij serialisatie hetzelfde behandeld als een gewone property — de XML is identiek. Ook de readonly class van PHP 8.2 werkt.

Kan ik meerdere klassen tegelijk plakken?

Ja — plak een hele entity-map of een enkel bestand met meerdere klassen. Elke top-level klasse komt eruit met geneste types uitgevouwen en ouderklasse-properties meegenomen. Traits worden behandeld als bijdragers van properties. Niets verdwijnt stilletjes.

Hoe worden DateTime, null, float en bool afgehandeld?

Instanties van DateTimeInterface (DateTime, DateTimeImmutable) worden gerenderd als ISO-8601-strings. null wordt een leeg element (<field/>) in plaats van weggelaten, zodat de XML-vorm consistent blijft. float gebruikt een gewone decimale notatie zonder locale-specifieke scheidingstekens, en bool wordt geserialiseerd als de tekst true/false — precies wat SimpleXMLElement produceert.

En arrays en geneste objecten?

Array-properties worden containerelementen met één child per entry. Een /** @var OrderItem[] */ public array $items wordt <items><OrderItem/><OrderItem/></items>. Associatieve arrays gebruiken hun string-sleutels als elementnamen. Geneste value objects worden inline uitgevouwen — op dezelfde manier waarop DOMDocument de boom zou opbouwen.

Wordt mijn code opgeslagen?

Je PHP wordt naar de backend gestuurd voor conversie en niet bewaard — we loggen de payload niet. Zoals altijd met online tools: als de code echt gevoelige literals bevat (DB-wachtwoorden, API-keys), schrap of mock die voordat je plakt.

Wat als de code magic methods of dynamische properties gebruikt?

Dynamische properties (runtime toegevoegd via __set of stdClass-casting) en magic getters (__get) kun je niet alleen uit statische code afleiden. De tool leest gedeclareerde properties, via de constructor gepromoveerde parameters en expliciete toewijzingen. Als een veld alleen via __get bestaat, declareer het dan als property zodat de converter het oppikt.

Andere tools die je wellicht nodig hebt

PHP naar XML is één puzzelstukje. Deze tools sluiten er mooi op aan: