PHP'den XML'e Dönüştürücü
PHP sınıflarını veya nesnelerini yapıştır. Temiz XML geri al.
Bu araç ne işe yarıyor
Bir PHP SoapClient çağrısı, bir WordPress eklenti export’u ya da hâlâ XML konuşan eski bir partner entegrasyonu için elle XML payload hazırlamak zorunda kaldıysan, bunun ne kadar angarya olduğunu bilirsin. PHP’yi buraya yapıştır, tek seferde düzgün yapılandırılmış XML geri al. Constructor promotion’lu tek bir sınıf, tam bir value object dosyası ya da içi doldurulmuş bir instance — aynı sonuç: her property’nin korunduğu eksiksiz bir XML belgesi.
Körlemesine string değiştirmek değil bu. Dönüştürücü, modern PHP 8+’yı doğru şekilde okur: constructor ile promote edilmiş property’ler, tanımlanmış olanlarla aynı davranır; readonly alanlar normal eleman olarak gelir; tipli property’ler (string, int, float, bool) tiplerini korur; DateTimeInterface değerleri ISO-8601 string olarak render edilir; null atlanmaz, boş eleman olur; diziler her girdi için bir alt eleman içeren konteyner elemanına dönüşür — SimpleXMLElement veya DOMDocument’ın tipik olarak ürettiğiyle aynı.
Sınıf yapısı ve metadata korunur. Her üst düzey sınıf, sınıf adıyla kök elemana dönüşür; public property’ler tanımlanma sırasıyla alt eleman olur; iç içe value object’lar inline açılır; array property’leri wrapper eleman olur. #[XmlRoot("x")] gibi PHP öznitelikleri veya @XmlElement("x") gibi docblock etiketleri, belirttiğin yerlerde eleman adlarını değiştirir. Laravel Eloquent modeli, bir Symfony Serializer DTO’su ya da sade bir value object yapıştır — XML, elle yazılmış bir SoapVar veya SOAP istek gövdesinin çıkacağı gibi çıkar.
Nasıl kullanılır
Üç adım. Tek bir sınıf yapıştırsan da <code>src/Entity</code> klasörünün tamamını yapıştırsan da akış aynı.
PHP’yi yapıştır (ya da örneği dene)
PHP’yi olduğu gibi soldaki editöre bırak. Constructor promotion’lu sınıf, readonly value object, birden fazla sınıf veya içi doldurulmuş instance — hepsi olur. Önce gerçekçi bir Order örneği görmek için Örneği yükle’ye tıkla.
<?php etiketini kaldırmana, namespace’leri sıyırmana veya docblock’ları silmene gerek yok. Kodu IDE’nde göründüğü gibi bırak. Yeter ki yapıştır.
Dönüştür’e bas
Yeşil Dönüştür düğmesine tıkla. Araç PHP’yi okur, her sınıfı ve property’yi korur ve XML’i tek seferde kurar. Çalışırken kısa bir parıltı görünür.
XML’i kopyala
Sağdaki panel, standartlara uyumlu herhangi bir parser’ın kabul edeceği girintili, düzgün yapılandırılmış XML ile dolar. Bir SoapClient isteğine, bir PHPUnit fixture’ına, bir WordPress export dosyasına veya bir API doküman örneğine bırak.
Gerçekten işe yaradığı durumlar
SoapClient istek fixture’ları hazırlama
Legacy bir SOAP endpoint’iyle <code>SoapClient</code> üzerinden konuşuyorsun ve bir PHP sınıfıyla eşleşen istek gövdesi lazım. Sınıfı yapıştır, XML’i al, <code>SoapVar</code> ile sar ya da <code>__doRequest()</code>’e besle.
WordPress/Drupal XML export’ları
20 alanlı bir custom post-type sınıfı veya Drupal entity’si, düzenlemeye hazır bir WXR veya XML export şablonuna dönüşür — PHP şekliyle eşleşmek için elle eleman yapısı kurma işi bitti.
Symfony/Laravel XML yanıtları
API’n çoğunlukla JSON döndürüyor ama bir istemci hâlâ XML istiyor. DTO’yu yapıştır, XML zarfını al, Symfony Response veya Laravel ResponseFactory örneğine bırak ve yoluna devam et.
PHPUnit fixture’ları ve snapshot testleri
Unit testlerindeki value-object instance’larını entegrasyon testleri, kontrat testleri veya sahte SOAP sunucuları için XML fixture dosyalarına çevir — göz kararı eşleşen bir XML şablonu elle yazmadan.
Sık sorulanlar
Constructor promotion ve readonly property’lerle başa çıkıyor mu?
Evet. Constructor’da promote edilmiş parametreler (__construct içindeki public string $orderId) tıpkı tanımlanmış property’ler gibi alt eleman olur. readonly, serileştirmede normal property ile aynı şekilde işlenir — XML birebir aynı. PHP 8.2’nin readonly class’ı da çalışır.
Aynı anda birden fazla sınıf yapıştırabilir miyim?
Evet — tüm bir entity klasörünü veya birden çok sınıf içeren tek bir dosyayı yapıştır. Her üst düzey sınıf, iç içe tipleri açılmış ve üst sınıf property’leri dahil edilmiş olarak gelir. Trait’ler property’lerini katkı olarak bırakıyor sayılır. Hiçbir şey sessizce düşmez.
DateTime, null, float ve bool nasıl ele alınıyor?
DateTimeInterface instance’ları (DateTime, DateTimeImmutable) ISO-8601 string olarak render edilir. null atlanmak yerine boş bir eleman olur (<field/>), böylece XML biçimi tutarlı kalır. float, locale’a özgü ayırıcılar olmadan sade ondalık gösterim kullanır; bool metin olarak true/false şeklinde serileştirilir — SimpleXMLElement’ın ürettiğiyle aynı.
Peki ya diziler ve iç içe nesneler?
Dizi property’leri her girdi için bir alt elemanlı konteyner elemana dönüşür. /** @var OrderItem[] */ public array $items, <items><OrderItem/><OrderItem/></items> olur. İlişkili diziler string anahtarlarını eleman adı olarak kullanır. İç içe value object’lar inline açılır — DOMDocument’ın ağacı kuracağı şekilde.
Kodum saklanıyor mu?
PHP’n dönüştürme için backend’e gönderiliyor ve saklanmıyor — payload’ı loglamıyoruz. Çevrimiçi araçlarda her zaman olduğu gibi, kod gerçekten hassas literal’lar (DB parolaları, API anahtarları) içeriyorsa yapıştırmadan önce temizle veya mock’a çevir.
Kod sihirli metotlar veya dinamik property’ler kullanıyorsa?
Dinamik property’ler (çalışma zamanında __set ya da stdClass’a cast ile eklenenler) ve sihirli getter’lar (__get) yalnızca statik koddan çıkarılamaz. Araç; tanımlı property’leri, constructor’da promote edilmiş parametreleri ve açık atamaları okur. Bir alan sadece __get üzerinden varsa, onu property olarak tanımla ki dönüştürücü yakalayabilsin.
İşine yarayabilecek diğer araçlar
PHP’den XML’e, yapbozun sadece bir parçası. Bu araçlar onunla iyi gider: