Wklej PHP po lewej i kliknij "Konwertuj" — zamienimy to w XMLWklej kod PHP

Co robi to narzędzie

Jeżeli kiedykolwiek musiałeś ręcznie składać payload XML do wywołania PHP SoapClient, eksportu z pluginu WordPressa albo starej integracji z partnerem, który wciąż mówi w XML, to wiesz, ile to roboty. Wklej tu PHP i jednym ruchem dostaniesz poprawnie sformułowany XML. Klasa z promocją konstruktora, cały plik z value objectami albo wypełniona instancja — wynik taki sam: kompletny dokument XML z zachowaną każdą właściwością.

To nie jest ślepe podmienianie stringów. Konwerter czyta nowoczesne PHP 8+ jak należy: promowane w konstruktorze właściwości zachowują się tak samo jak zadeklarowane, pola readonly trafiają jako zwykłe elementy, typowane właściwości (string, int, float, bool) zachowują typy, wartości DateTimeInterface renderują się jako stringi ISO-8601, null zamienia się w pusty element (a nie znika), a tablice stają się elementami kontenerowymi z jednym dzieckiem na wpis — tak jak zwykle produkują to SimpleXMLElement lub DOMDocument.

Struktura klasy i metadane są respektowane. Każda klasa najwyższego poziomu staje się elementem głównym o nazwie klasy, publiczne właściwości zamieniają się w elementy-dzieci w kolejności deklaracji, zagnieżdżone value objecty rozwijają się inline, a właściwości typu array stają się elementami-otoczeniami. Atrybuty PHP takie jak #[XmlRoot("x")] albo tagi docblock jak @XmlElement("x") zmieniają nazwy elementów tam, gdzie to wskażesz. Wklej model Eloquent z Laravela, DTO z Symfony Serializer albo zwykły value object — XML wychodzi taki, jaki dałby ręcznie napisany SoapVar albo ciało requestu SOAP.

Jak używać

Trzy kroki. Ten sam flow, czy wklejasz jedną klasę, czy cały folder <code>src/Entity</code>.

1

Wklej swój PHP (albo wypróbuj przykład)

Wrzuć PHP do lewego edytora tak, jak jest. Klasa z promocją konstruktora, readonly value object, kilka klas albo wypełniona instancja — wszystko spoko. Kliknij Wczytaj przykład, żeby najpierw zobaczyć realistyczny przypadek z Order.

Nie musisz usuwać tagu <?php, obcinać namespace’ów ani kasować docblocków. Zostaw kod taki, jak wygląda w IDE. Po prostu wklej.

2

Kliknij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie czyta PHP, zachowuje każdą klasę i właściwość, i buduje XML w jednym przebiegu. Krótki błysk pokazuje, że działa.

3

Skopiuj XML

Prawy panel wypełnia się wciętym, poprawnie sformułowanym XML-em, który przyjmie każdy parser zgodny ze standardem. Wrzuć go do requestu SoapClient, fixture’a PHPUnit, pliku eksportu WordPressa albo przykładu w dokumentacji API.

Kiedy to faktycznie ratuje sytuację

Budowanie fixture’ów requestów SoapClient

Gadasz z legacy endpointem SOAP przez <code>SoapClient</code> i potrzebujesz ciała requestu dopasowanego do klasy PHP. Wklej klasę, weź XML, opakuj go <code>SoapVar</code> albo podaj do <code>__doRequest()</code>.

Eksporty XML w WordPressie/Drupalu

Klasa custom post type albo encja Drupal z 20 polami zamienia się w gotowy do edycji szablon eksportu WXR albo XML — koniec z ręcznym układaniem struktury elementów pod kształt PHP.

Odpowiedzi XML w Symfony/Laravelu

Twoje API zwraca głównie JSON, ale jeden klient wciąż chce XML. Wklej DTO, zgarnij kopertę XML, wstaw do przykładu Symfony Response lub Laravel ResponseFactory i jedź dalej.

Fixture’y PHPUnit i testy snapshotowe

Zamień instancje value objectów z testów jednostkowych w pliki fixture XML do testów integracyjnych, kontraktowych czy zamockowanych serwerów SOAP — bez ręcznego klecenia pasującego szablonu XML na oko.

Częste pytania

Radzi sobie z promocją konstruktora i właściwościami readonly?

Tak. Parametry promowane w konstruktorze (public string $orderId wewnątrz __construct) stają się elementami-dziećmi tak samo jak zadeklarowane właściwości. readonly przy serializacji traktowane jest tak samo jak zwykła właściwość — XML jest identyczny. Działa też readonly class z PHP 8.2.

Mogę wkleić kilka klas naraz?

Tak — wklej cały folder encji albo jeden plik z wieloma klasami. Każda klasa najwyższego poziomu wychodzi z rozwiniętymi typami zagnieżdżonymi i wciągniętymi właściwościami klasy nadrzędnej. Traity są traktowane tak, że wnoszą swoje właściwości. Nic po cichu nie ginie.

Jak obsługiwane są DateTime, null, float i bool?

Instancje DateTimeInterface (DateTime, DateTimeImmutable) są renderowane jako stringi ISO-8601. null staje się pustym elementem (<field/>) zamiast być pomijany, żeby kształt XML pozostał spójny. float używa zwykłego zapisu dziesiętnego bez separatorów zależnych od locale, a bool serializowany jest jako tekst true/false — dokładnie jak produkuje to SimpleXMLElement.

A tablice i zagnieżdżone obiekty?

Właściwości tablicowe stają się elementami kontenerowymi z jednym dzieckiem na wpis. /** @var OrderItem[] */ public array $items staje się <items><OrderItem/><OrderItem/></items>. Tablice asocjacyjne używają kluczy stringowych jako nazw elementów. Zagnieżdżone value objecty rozwijają się inline — tak samo, jak DOMDocument zbudowałby drzewo.

Czy mój kod jest zapisywany?

Twój PHP jest wysyłany do backendu do konwersji i nie jest przechowywany — nie logujemy payloadu. Jak zawsze z narzędziami online: jeżeli kod zawiera naprawdę wrażliwe literały (hasła do bazy, klucze API), wyczyść je albo podmień na mocki przed wklejeniem.

A jeśli kod używa metod magicznych albo dynamicznych właściwości?

Dynamicznych właściwości (dodawanych w runtime przez __set lub rzutowanie na stdClass) i magicznych getterów (__get) nie da się wywnioskować z samego kodu statycznego. Narzędzie czyta zadeklarowane właściwości, parametry promowane w konstruktorze i jawne przypisania. Jeżeli pole istnieje tylko przez __get, zadeklaruj je jako właściwość, żeby konwerter je wyłapał.

Inne narzędzia, które mogą się przydać

PHP na XML to jeden element układanki. Te narzędzia dobrze do tego pasują: