Konwerter PHP na XML
Wklej klasy lub obiekty PHP. Otrzymaj czysty XML.
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>.
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.
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.
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ą: