PHP til XML-konverter
Indsæt PHP-klasser eller objekter. Få ren XML tilbage.
Hvad værktøjet gør
Hvis du nogensinde har skullet fikle en XML-payload sammen i hånden til et PHP SoapClient-kald, en WordPress-plugin-eksport eller en gammel partnerintegration, der stadig taler XML, så ved du hvor tidskrævende det er. Indsæt PHP her, og du får velformet XML tilbage i én omgang. En klasse med constructor promotion, en hel value object-fil eller en udfyldt instans — samme resultat: et komplet XML-dokument, hvor hver egenskab bevares.
Det er ikke blind streng-erstatning. Konverteren læser moderne PHP 8+ ordentligt: constructor-promoverede egenskaber opfører sig som deklarerede, readonly-felter kommer ud som almindelige elementer, typede egenskaber (string, int, float, bool) bevarer deres typer, DateTimeInterface-værdier renderes som ISO-8601-strenge, null bliver til et tomt element (i stedet for at blive droppet), og arrays bliver til containerelementer med ét barn per post — lige som SimpleXMLElement eller DOMDocument typisk ville producere.
Klassens struktur og metadata respekteres. Hver klasse på topniveau bliver til et rodelement opkaldt efter klassen, public-egenskaber bliver til børneelementer i deklarationsrækkefølge, indlejrede value objects foldes ud inline, og array-egenskaber bliver til wrapper-elementer. PHP-attributter som #[XmlRoot("x")] eller docblock-tags som @XmlElement("x") omdøber elementer de steder, du angiver. Indsæt en Eloquent-model fra Laravel, en DTO fra Symfony Serializer eller et almindeligt value object — XML-en kommer ud, som en håndskreven SoapVar eller et SOAP-request-body ville se ud.
Sådan bruger du det
Tre trin. Samme flow uanset om du indsætter én klasse eller hele <code>src/Entity</code>-mappen.
Indsæt din PHP (eller prøv eksemplet)
Smæk din PHP ind i editoren til venstre, som den er. En klasse med constructor promotion, et readonly value object, flere klasser eller en udfyldt instans — alt fungerer. Klik på Indlæs eksempel for først at se et realistisk Order-eksempel.
Du behøver ikke fjerne <?php-taggen, pille namespaces af eller slette docblocks. Lad koden stå, som den ser ud i din IDE. Bare indsæt.
Tryk Konverter
Klik på den grønne Konverter-knap. Værktøjet læser PHP-koden, bevarer hver klasse og egenskab, og bygger XML-en i én omgang. Et kort glimt viser, at der arbejdes.
Kopier XML-en
Højre panel fyldes med indrykket, velformet XML, som enhver standardkonform parser vil acceptere. Smid den ind i en SoapClient-request, en PHPUnit-fixture, en WordPress-eksportfil eller et eksempel i API-dokumentationen.
Hvornår det faktisk er nyttigt
Bygge fixtures til SoapClient-requests
Du snakker med et legacy-SOAP-endpoint via <code>SoapClient</code> og har brug for en request-body, der matcher en PHP-klasse. Indsæt klassen, tag XML-en, pak den ind med <code>SoapVar</code> eller giv den til <code>__doRequest()</code>.
XML-eksporter i WordPress/Drupal
En klasse til en custom post type eller en Drupal-entitet med 20 felter bliver til en klar-til-redigering WXR- eller XML-eksportskabelon — slut med at pille elementstrukturer sammen i hånden for at matche PHP-formen.
XML-svar i Symfony/Laravel
Dit API returnerer mest JSON, men én klient vil stadig have XML. Indsæt DTO’en, tag XML-kuvertet, smid det ind i et eksempel med Symfony Response eller Laravel ResponseFactory, og videre.
PHPUnit-fixtures og snapshot-tests
Lav value-object-instanser fra dine enhedstests om til XML-fixturefiler til integrationstests, kontrakttests eller mockede SOAP-servere — uden at skrive en matchende XML-skabelon i hånden på øjemål.
Almindelige spørgsmål
Håndterer den constructor promotion og readonly-egenskaber?
Ja. Constructor-promoverede parametre (public string $orderId inde i __construct) bliver til børneelementer ligesom deklarerede egenskaber. readonly behandles som en almindelig egenskab ved serialisering — XML-en er identisk. PHP 8.2’s readonly class virker også.
Kan jeg indsætte flere klasser på én gang?
Ja — indsæt en hel entity-mappe eller en enkelt fil med flere klasser. Hver klasse på topniveau kommer ud med indlejrede typer foldet ud og egenskaber fra forældreklassen taget med. Traits behandles, så de bidrager med deres egenskaber. Intet forsvinder i stilhed.
Hvordan håndteres DateTime, null, float og bool?
Instanser af DateTimeInterface (DateTime, DateTimeImmutable) renderes som ISO-8601-strenge. null bliver til et tomt element (<field/>) i stedet for at blive udeladt, så XML-formen er konsistent. float bruger almindelig decimalnotation uden locale-specifikke separatorer, og bool serialiseres som teksten true/false — præcis hvad SimpleXMLElement producerer.
Hvad med arrays og indlejrede objekter?
Array-egenskaber bliver til containerelementer med ét barn per post. En /** @var OrderItem[] */ public array $items bliver til <items><OrderItem/><OrderItem/></items>. Associative arrays bruger deres streng-nøgler som elementnavne. Indlejrede value objects foldes ud inline — på samme måde som DOMDocument ville bygge træet.
Gemmes min kode?
Din PHP sendes til backenden til konvertering og gemmes ikke — vi logger ikke payloaden. Som altid med onlineværktøjer: hvis koden indeholder rigtigt følsomme literaler (DB-kodeord, API-nøgler), så fjern eller moc dem, før du indsætter.
Hvad hvis koden bruger magiske metoder eller dynamiske egenskaber?
Dynamiske egenskaber (tilføjet i runtime via __set eller stdClass-casting) og magiske gettere (__get) kan ikke udledes fra statisk kode alene. Værktøjet læser deklarerede egenskaber, constructor-promoverede parametre og eksplicitte tildelinger. Hvis et felt kun findes via __get, så deklarer det som en egenskab, så konverteren kan fange det.
Andre værktøjer du kan få brug for
PHP til XML er kun én brik i puslespillet. Disse værktøjer passer godt sammen med det: