Pega PHP a la izquierda y pulsa "Convertir" — lo convertimos en XMLPega código PHP

Qué hace esta herramienta

Si alguna vez has tenido que armar a mano un payload XML para una llamada con PHP SoapClient, una exportación de un plugin de WordPress o una integración antigua con un partner que sigue hablando XML, ya sabes lo pesado que es. Pega el PHP aquí y recibes XML bien formado en una sola pasada. Una clase con promoción de constructor, un archivo completo de value objects o una instancia poblada — el resultado es el mismo: un documento XML completo con todas las propiedades preservadas.

No es un reemplazo de cadenas a ciegas. El convertidor lee PHP 8+ moderno como debe: las propiedades promovidas en el constructor se comportan igual que las declaradas, los campos readonly salen como elementos normales, las propiedades tipadas (string, int, float, bool) preservan sus tipos, los valores DateTimeInterface se serializan como cadenas ISO-8601, null se vuelve un elemento vacío (no se descarta) y los arrays se convierten en elementos contenedores con un hijo por entrada — igual que lo harían típicamente SimpleXMLElement o DOMDocument.

La estructura de las clases y los metadatos se respetan. Cada clase de nivel superior se convierte en un elemento raíz con el nombre de la clase, las propiedades públicas se vuelven elementos hijos en orden de declaración, los value objects anidados se expanden en línea y las propiedades array se convierten en elementos envoltorio. Los atributos PHP tipo #[XmlRoot("x")] o las etiquetas de docblock como @XmlElement("x") renombran elementos donde los especifiques. Pega un modelo Eloquent de Laravel, un DTO de Symfony Serializer o un value object simple — el XML sale como lo haría un SoapVar hecho a mano o un body de petición SOAP.

Cómo usarla

Tres pasos. El mismo flujo si pegas una clase o toda la carpeta <code>src/Entity</code>.

1

Pega tu PHP (o prueba el ejemplo)

Suelta tu PHP en el editor de la izquierda tal cual. Una clase con promoción de constructor, un value object readonly, varias clases o una instancia poblada — todo vale. Pulsa Cargar ejemplo para ver primero un caso realista con Order.

No hace falta quitar la etiqueta <?php, borrar los namespaces ni eliminar los docblocks. Deja el código como lo tienes en tu IDE. Solo pégalo.

2

Pulsa Convertir

Haz clic en el botón verde Convertir. La herramienta lee el PHP, conserva cada clase y propiedad, y construye el XML en una sola pasada. Verás un breve destello mientras trabaja.

3

Copia el XML

El panel derecho se rellena con XML indentado y bien formado que cualquier parser conforme al estándar aceptará. Pégalo en una petición SoapClient, en una fixture de PHPUnit, en un archivo de exportación de WordPress o en un ejemplo de documentación de API.

Cuándo realmente te saca de apuros

Crear fixtures de peticiones SoapClient

Estás hablando con un endpoint SOAP legado vía <code>SoapClient</code> y necesitas un body que coincida con una clase PHP. Pega la clase, coge el XML y envuélvelo con <code>SoapVar</code> o pásalo a <code>__doRequest()</code>.

Exportaciones XML de WordPress/Drupal

Una clase de custom post-type o una entidad de Drupal con 20 campos se convierte en una plantilla de exportación WXR o XML lista para editar — se acabó lo de armar a mano la estructura de elementos para que cuadre con el shape de PHP.

Respuestas XML en Symfony/Laravel

Tu API devuelve JSON casi siempre, pero un cliente sigue queriendo XML. Pega el DTO, coge el envelope XML, mételo en un ejemplo de Symfony Response o Laravel ResponseFactory y sigue con tu vida.

Fixtures de PHPUnit y tests de snapshot

Convierte instancias de value objects de tus tests unitarios en archivos XML de fixture para tests de integración, tests de contrato o servidores SOAP mock — sin tener que escribir a mano una plantilla XML a ojo.

Preguntas frecuentes

¿Gestiona la promoción de constructor y las propiedades readonly?

Sí. Los parámetros promovidos en el constructor (public string $orderId dentro de __construct) se vuelven elementos hijos igual que las propiedades declaradas. readonly se trata igual que una propiedad normal para la serialización — el XML es idéntico. El readonly class de PHP 8.2 también funciona.

¿Puedo pegar varias clases a la vez?

Sí — pega toda una carpeta de entidades o un único archivo con varias clases. Cada clase de nivel superior sale con los tipos anidados expandidos y las propiedades de la clase padre incorporadas. Los traits aportan sus propiedades. No se descarta nada en silencio.

¿Cómo se tratan DateTime, null, float y bool?

Las instancias de DateTimeInterface (DateTime, DateTimeImmutable) se renderizan como cadenas ISO-8601. null se vuelve un elemento vacío (<field/>) en lugar de omitirse, para que la forma del XML se mantenga consistente. float usa notación decimal plana sin separadores específicos del locale, y bool se serializa como el texto true/false — igual que produce SimpleXMLElement.

¿Qué pasa con los arrays y los objetos anidados?

Las propiedades de tipo array se convierten en elementos contenedor con un hijo por entrada. Un /** @var OrderItem[] */ public array $items se convierte en <items><OrderItem/><OrderItem/></items>. Los arrays asociativos usan sus claves string como nombres de elemento. Los value objects anidados se expanden en línea — igual que DOMDocument construiría el árbol.

¿Se guarda mi código?

Tu PHP se envía al backend para convertirlo y no se persiste — no registramos el payload. Como siempre con herramientas online, si el código contiene literales realmente sensibles (contraseñas de BD, API keys), límpialos o cámbialos por mocks antes de pegarlo.

¿Y si el código usa métodos mágicos o propiedades dinámicas?

Las propiedades dinámicas (añadidas en runtime vía __set o casting a stdClass) y los getters mágicos (__get) no se pueden inferir solo a partir del código estático. La herramienta lee propiedades declaradas, parámetros promovidos del constructor y asignaciones explícitas. Si un campo solo existe a través de __get, decláralo como propiedad para que el convertidor lo detecte.

Otras herramientas que te pueden venir bien

PHP a XML es solo una pieza del puzzle. Estas herramientas combinan muy bien con ella: