Conversor PHP para XML
Cole classes ou objetos PHP. Receba XML limpo de volta.
O que esta ferramenta faz
Se você já teve que montar na mão um payload XML para uma chamada PHP SoapClient, uma exportação de plugin WordPress ou uma integração antiga com parceiro que ainda fala XML, sabe o quanto é trabalhoso. Cole o PHP aqui e receba XML bem-formado em uma única passagem. Uma classe com promoção de construtor, um arquivo inteiro de value objects ou uma instância populada — o resultado é o mesmo: um documento XML completo com todas as propriedades preservadas.
Não é substituição cega de strings. O conversor lê PHP 8+ moderno do jeito certo: propriedades promovidas no construtor se comportam como as declaradas, campos readonly saem como elementos normais, propriedades tipadas (string, int, float, bool) preservam os tipos, valores DateTimeInterface são renderizados como strings ISO-8601, null vira um elemento vazio (em vez de ser descartado), e arrays viram elementos contêiner com um filho por entrada — igual ao que SimpleXMLElement ou DOMDocument tipicamente produziriam.
A estrutura da classe e os metadados são respeitados. Cada classe de nível superior vira um elemento raiz com o nome da classe, propriedades públicas viram elementos filhos na ordem de declaração, value objects aninhados são expandidos inline, e propriedades array viram elementos invólucro. Atributos PHP como #[XmlRoot("x")] ou tags de docblock como @XmlElement("x") renomeiam elementos onde você especificar. Cole um model Eloquent do Laravel, um DTO do Symfony Serializer ou um value object simples — o XML sai como sairia um SoapVar escrito à mão ou um corpo de requisição SOAP.
Como usar
Três passos. O mesmo fluxo quer você cole uma classe ou a pasta <code>src/Entity</code> inteira.
Cole o PHP (ou experimente o exemplo)
Jogue o PHP no editor da esquerda do jeito que está. Uma classe com promoção de construtor, um value object readonly, várias classes ou uma instância populada — tudo serve. Clique em Carregar exemplo para ver primeiro um caso realista com Order.
Não precisa remover a tag <?php, tirar os namespaces nem apagar os docblocks. Deixe o código como está no seu IDE. Só colar.
Clique em Converter
Clique no botão verde Converter. A ferramenta lê o PHP, mantém cada classe e propriedade e monta o XML em uma passagem. Um leve brilho aparece enquanto processa.
Copie o XML
O painel da direita se preenche com XML indentado e bem-formado, que qualquer parser compatível com o padrão aceita. Use em uma requisição SoapClient, em uma fixture de PHPUnit, em um arquivo de exportação do WordPress ou em um exemplo da documentação da API.
Quando isso realmente ajuda
Montar fixtures de requisição SoapClient
Você está falando com um endpoint SOAP legado via <code>SoapClient</code> e precisa de um corpo de requisição que bate com uma classe PHP. Cole a classe, pegue o XML e envolva com <code>SoapVar</code> ou passe para <code>__doRequest()</code>.
Exportações XML de WordPress/Drupal
Uma classe de custom post type ou uma entidade do Drupal com 20 campos vira um template WXR/XML de exportação pronto para editar — chega de montar à mão a estrutura de elementos para bater com o shape do PHP.
Respostas XML em Symfony/Laravel
Sua API devolve JSON quase sempre, mas um cliente ainda quer XML. Cole o DTO, pegue o envelope XML, coloque num exemplo de Symfony Response ou Laravel ResponseFactory e siga em frente.
Fixtures do PHPUnit e testes de snapshot
Transforme instâncias de value object dos seus testes unitários em arquivos de fixture XML para testes de integração, testes de contrato ou servidores SOAP mockados — sem precisar escrever na mão um template XML correspondente no olho.
Perguntas comuns
Ele lida com promoção de construtor e propriedades readonly?
Sim. Parâmetros promovidos pelo construtor (public string $orderId dentro do __construct) viram elementos filhos exatamente como propriedades declaradas. readonly é tratado igual a uma propriedade normal na serialização — o XML é idêntico. O readonly class do PHP 8.2 também funciona.
Posso colar várias classes de uma vez?
Sim — cole uma pasta inteira de entidades ou um único arquivo com várias classes. Cada classe de nível superior sai com os tipos aninhados expandidos e as propriedades da classe pai incluídas. Traits são tratadas como contribuidoras de propriedades. Nada é descartado em silêncio.
Como DateTime, null, float e bool são tratados?
Instâncias de DateTimeInterface (DateTime, DateTimeImmutable) são renderizadas como strings ISO-8601. null vira um elemento vazio (<field/>) em vez de ser omitido, para o formato do XML ficar consistente. float usa notação decimal comum sem separadores específicos de locale, e bool é serializado como o texto true/false — igual ao que o SimpleXMLElement produz.
E arrays e objetos aninhados?
Propriedades de array viram elementos contêiner com um filho por entrada. Um /** @var OrderItem[] */ public array $items vira <items><OrderItem/><OrderItem/></items>. Arrays associativos usam as chaves string como nomes de elemento. Value objects aninhados são expandidos inline — do mesmo jeito que o DOMDocument montaria a árvore.
Meu código é armazenado?
Seu PHP é enviado para o backend para conversão e não é persistido — não logamos o payload. Como sempre com ferramentas online, se o código tem literais realmente sensíveis (senhas de banco, chaves de API), limpe ou troque por mocks antes de colar.
E se o código usa métodos mágicos ou propriedades dinâmicas?
Propriedades dinâmicas (adicionadas em runtime via __set ou cast para stdClass) e getters mágicos (__get) não dá para inferir só a partir do código estático. A ferramenta lê propriedades declaradas, parâmetros promovidos pelo construtor e atribuições explícitas. Se um campo só existe via __get, declare-o como propriedade para o conversor pegar.
Outras ferramentas que podem ajudar
PHP para XML é só uma peça do quebra-cabeça. Estas ferramentas combinam bem com ela: