Convertisseur PHP vers XML
Colle des classes ou des objets PHP. Récupère du XML propre.
Ce que fait cet outil
Si tu as déjà dû bricoler à la main un payload XML pour un appel PHP SoapClient, un export d'un plugin WordPress, ou une vieille intégration partenaire qui parle encore XML, tu sais à quel point c'est chronophage. Colle ton PHP ici et récupère du XML bien formé en une passe. Une classe avec promotion de constructeur, un fichier complet de value objects, ou une instance peuplée — même résultat : un document XML complet avec chaque propriété préservée.
Ce n'est pas un simple remplacement de chaînes à l'aveugle. Le convertisseur lit correctement le PHP 8+ moderne : les propriétés promues par le constructeur se comportent comme celles déclarées, les champs readonly sortent en tant qu'éléments classiques, les propriétés typées (string, int, float, bool) gardent leurs types, les valeurs DateTimeInterface sont rendues en ISO-8601, null devient un élément vide (pas supprimé), et les tableaux deviennent des éléments conteneurs avec un enfant par entrée — comme le feraient typiquement SimpleXMLElement ou DOMDocument.
La structure des classes et les métadonnées sont respectées. Chaque classe de premier niveau devient un élément racine portant le nom de la classe, les propriétés publiques deviennent des éléments enfants dans l'ordre de déclaration, les value objects imbriqués sont développés en ligne, et les propriétés de type array deviennent des éléments enveloppes. Les attributs PHP comme #[XmlRoot("x")] ou les tags de docblock comme @XmlElement("x") renomment les éléments là où tu le précises. Colle un modèle Eloquent Laravel, un DTO Symfony Serializer ou un simple value object — le XML sort comme le ferait un SoapVar écrit à la main ou un corps de requête SOAP.
Comment l'utiliser
Trois étapes. Même flux que tu colles une classe ou tout le dossier <code>src/Entity</code>.
Colle ton PHP (ou essaie l'exemple)
Dépose ton PHP dans l'éditeur de gauche tel quel. Une classe avec promotion de constructeur, un value object readonly, plusieurs classes, ou une instance peuplée — tout passe. Clique sur Charger un exemple pour voir d'abord un cas Order réaliste.
Pas besoin d'enlever la balise <?php, de virer les namespaces ou de supprimer les docblocks. Garde le code tel qu'il est dans ton IDE. Colle, c'est tout.
Clique sur Convertir
Clique sur le bouton vert Convertir. L'outil lit le PHP, conserve chaque classe et chaque propriété, et construit le XML en une passe. Un petit flash apparaît pendant le traitement.
Copie le XML
Le panneau de droite se remplit avec du XML indenté et bien formé, que n'importe quel parser conforme acceptera. Colle-le dans une requête SoapClient, une fixture PHPUnit, un fichier d'export WordPress ou un exemple dans la doc de ton API.
Quand ça dépanne vraiment
Construire des fixtures de requêtes SoapClient
Tu parles à un endpoint SOAP legacy via <code>SoapClient</code> et il te faut un corps de requête qui colle à une classe PHP. Colle la classe, prends le XML, enveloppe-le avec <code>SoapVar</code> ou passe-le à <code>__doRequest()</code>.
Exports XML WordPress/Drupal
Une classe de custom post-type ou une entité Drupal à 20 champs devient un template d'export WXR ou XML prêt à éditer — fini de fabriquer à la main des structures d'éléments qui matchent le shape PHP.
Réponses XML Symfony/Laravel
Ton API renvoie surtout du JSON mais un client veut toujours du XML. Colle le DTO, récupère l'enveloppe XML, pose-la dans un exemple Symfony Response ou Laravel ResponseFactory, et passe à la suite.
Fixtures PHPUnit et tests de snapshot
Transforme des instances de value objects de tes tests unitaires en fichiers fixtures XML pour des tests d'intégration, des contract tests, ou des serveurs SOAP mockés — sans écrire à la main un template XML correspondant au jugé.
Questions fréquentes
Gère-t-il la promotion de constructeur et les propriétés readonly ?
Oui. Les paramètres promus par le constructeur (public string $orderId dans __construct) deviennent des éléments enfants, exactement comme les propriétés déclarées. readonly est traité comme une propriété classique pour la sérialisation — le XML est identique. Le readonly class de PHP 8.2 fonctionne aussi.
Puis-je coller plusieurs classes à la fois ?
Oui — colle un dossier d'entités entier ou un seul fichier contenant plusieurs classes. Chaque classe de premier niveau ressort avec les types imbriqués développés et les propriétés de classe parent intégrées. Les traits apportent leurs propriétés. Rien n'est perdu silencieusement.
Comment sont gérés DateTime, null, float et bool ?
Les instances de DateTimeInterface (DateTime, DateTimeImmutable) sont rendues en chaînes ISO-8601. null devient un élément vide (<field/>) au lieu d'être omis, pour que la forme du XML reste cohérente. float utilise une notation décimale simple sans séparateurs spécifiques à la locale, et bool se sérialise en texte true/false — comme ce que produit SimpleXMLElement.
Et pour les tableaux et les objets imbriqués ?
Les propriétés de type tableau deviennent des éléments conteneurs avec un enfant par entrée. Un /** @var OrderItem[] */ public array $items devient <items><OrderItem/><OrderItem/></items>. Les tableaux associatifs utilisent leurs clés de type chaîne comme noms d'élément. Les value objects imbriqués sont développés en ligne — exactement comme DOMDocument construirait l'arbre.
Mon code est-il conservé ?
Ton PHP est envoyé au backend pour la conversion et n'est pas persisté — on ne logge pas le payload. Comme toujours avec les outils en ligne, si le code contient des littéraux vraiment sensibles (mots de passe de BDD, clés d'API), nettoie-les ou remplace-les par des mocks avant de coller.
Et si le code utilise des méthodes magiques ou des propriétés dynamiques ?
Les propriétés dynamiques (ajoutées à l'exécution via __set ou un cast vers stdClass) et les getters magiques (__get) ne peuvent pas être déduits à partir du code statique seul. L'outil lit les propriétés déclarées, les paramètres promus par le constructeur et les affectations explicites. Si un champ n'existe que via __get, déclare-le comme propriété pour que le convertisseur le prenne en compte.
Autres outils qui peuvent servir
PHP vers XML n'est qu'une pièce du puzzle. Ces outils se marient bien avec :