PHP Kod Oluşturucu
- En yeni PHP özelliklerini destekler (özellik kancaları, enumlar, nitelikler vb. gibi)
- Mevcut sınıfları kolayca değiştirmenizi sağlar
- PSR-12 / PER kodlama stili ile uyumlu çıkış
- Olgun, kararlı ve yaygın olarak kullanılan kütüphane
Kurulum
Composer'ı kullanarak paketi indirin ve yükleyin:
PHP uyumluluğu için tabloya bakın.
Sınıflar
ClassType kullanarak sınıf oluşturmanın basit bir örneği ile başlayalım:
Bu sonucu verecektir:
Kodu oluşturmak için echo $class
adresinden farklı olarak daha fazla
yapılandırabileceğimiz bir yazıcı da kullanabiliriz:
Sabitleri ( Constant sınıfı) ve özellikleri ( Property sınıfı) ekleyebiliriz:
Üretiyor:
Ve yöntemler ekleyebiliriz:
Sonuç olarak:
PHP 8.0 ile tanıtılan tanıtılan değiştirgeler kurucuya aktarılabilir:
Sonuç olarak:
Readonly özellikler ve sınıflar setReadOnly()
aracılığıyla işaretlenebilir.
Eklenen özellik, sabit, yöntem veya parametre zaten mevcutsa, istisna atar.
Üyeler removeProperty()
, removeConstant()
, removeMethod()
veya
removeParameter()
adresleri kullanılarak çıkarılabilir.
Ayrıca mevcut Method
, Property
veya Constant
nesnelerini de sınıfa
ekleyebilirsiniz:
Mevcut yöntemleri, özellikleri ve sabitleri cloneWithName()
adresini kullanarak farklı bir adla
klonlayabilirsiniz:
Arayüz veya Özellik
Arayüzler ve özellikler oluşturabilirsiniz ( InterfaceType ve TraitType sınıfları):
Özellikleri kullanma:
Sonuç:
Enumlar
PHP 8.1'in getirdiği enumları (EnumType sınıfı) kolayca oluşturabilirsiniz:
Sonuç:
Destekli bir enum oluşturmak için durumlar için skaler eşdeğerler de tanımlayabilirsiniz:
addComment()
veya addAttribute()
adreslerini kullanarak her bir vakaya bir yorum veya nitelik eklemek mümkündür.
Anonim Sınıf
İsim olarak null
verin ve anonim bir sınıfınız olsun:
Sonuç:
Küresel İşlev
Fonksiyonların kodu GlobalFunction sınıfını oluşturacaktır:
Sonuç:
Kapanış
Kapanışların kodu Closure sınıfını oluşturacaktır:
Sonuç:
Ok Fonksiyonu
Kapanışı yazıcı kullanarak ok işlevi olarak da yazdırabilirsiniz:
Sonuç:
Yöntem ve İşlev İmzası
Metotlar Metot sınıfı tarafından temsil edilir. Görünürlüğü, dönüş değerini ayarlayabilir, yorumlar, nitelikler vb. ekleyebilirsiniz:
Her parametre bir Parameter sınıfı ile temsil edilir. Yine, akla gelebilecek her özelliği ayarlayabilirsiniz:
Variadics parametrelerini (veya splat, spread, ellipsis, unpacking veya three dots operatörlerini) tanımlamak için
setVariadic()
adresini kullanın:
Üretir:
Yöntem ve İşlev Gövde
Gövde setBody()
yöntemine bir kerede veya addBody()
adresini tekrar tekrar çağırarak sırayla
(satır satır) aktarılabilir:
Sonuç
Değişkenleri enjekte etmenin kullanışlı bir yolu için özel yer tutucular kullanabilirsiniz.
Basit yer tutucular ?
Sonuç:
Varyadik yer tutucu ...?
Sonuç:
Yer tutucu kullanarak PHP 8 isimli parametreleri de kullanabilirsiniz ...?:
Eğik çizgi kullanarak yer tutucudan kaçış \?
Sonuç:
Yazıcılar ve PSR Uyumluluğu
Printer sınıfı PHP kodu üretmek için kullanılır:
printFunction()
, printNamespace()
gibi yöntemler sunarak diğer tüm öğeler için kod
oluşturabilir.
Ayrıca, çıkışı PSR-2 / PSR-12 / PER kodlama stiline uygun olan PsrPrinter
sınıfı da mevcuttur:
Davranışı ihtiyaçlarınıza göre ayarlamanız mı gerekiyor? Printer
sınıfından miras alarak kendi
yazıcınızı oluşturun. Bu değişkenleri yeniden yapılandırabilirsiniz:
Standart Printer
ve PsrPrinter
tam olarak nasıl ve neden farklıdır? Pakette neden sadece tek bir
yazıcı, PsrPrinter
yok?
Standart Printer
kodu tüm Nette'de yaptığımız gibi biçimlendirir. Nette, PSR'den çok daha önce
oluşturulduğundan ve ayrıca PSR uzun yıllar boyunca standartları zamanında teslim etmediğinden, hatta bazen PHP'de yeni bir
özelliğin tanıtılmasından birkaç yıl gecikmeyle bile olsa, bu kodlama standardında birkaç küçük farklılığa neden oldu. En
büyük fark ise boşluk yerine sekme kullanılmasıdır. Projelerimizde sekme kullanarak, görme engelli insanlar için çok önemli
olan genişlik ayarlamasına izin verdiğimizi biliyoruz. Küçük bir farka örnek olarak, küme parantezinin işlevler ve
yöntemler için ve her zaman ayrı bir satıra yerleştirilmesi verilebilir. PSR tavsiyesinin mantıksız olduğunu ve kod netliğinde azalmaya yol açtığını
düşünüyoruz.
Türleri
Her tür veya birlik/kesişim türü bir dize olarak geçirilebilir, ayrıca yerel türler için önceden tanımlanmış sabitleri de kullanabilirsiniz:
Aynı durum setReturnType()
yöntemi için de geçerlidir.
Gerçekler
Literal
ile, örneğin varsayılan özellik veya parametre değerleri vb. için rastgele PHP kodu
aktarabilirsiniz:
Sonuç:
Ayrıca Literal
adresine parametre aktarabilir ve özel yer
tutucular kullanarak geçerli PHP kodu olarak biçimlendirilmesini sağlayabilirsiniz:
Yeni bir nesnenin oluşturulmasını temsil eden değişmez, new
yöntemi tarafından kolayca oluşturulur:
Nitelikler
PHP 8 özniteliklerini tüm sınıflara, yöntemlere, özelliklere, sabitlere, enum durumlarına, işlevlere, kapanışlara ve değiştirgelere ekleyebilirsiniz. Değiştirge değeri olarak değişmezler de kullanılabilir.
Sonuç:
Mülkiyet Kancaları
Ayrıca, PHP 8.4'te tanıtılan bir özellik olan get ve set işlemleri için özellik kancaları ( PropertyHook sınıfı ile temsil edilir) tanımlayabilirsiniz:
Bu üretir:
Özellikler ve özellik kancaları soyut veya nihai olabilir:
Asimetrik Görünürlük
PHP 8.4 özellikler için asimetrik görünürlük sunar. Okuma ve yazma için farklı erişim seviyeleri ayarlayabilirsiniz.
Görünürlük, iki parametreli setVisibility()
yöntemi kullanılarak veya görünürlüğün özelliği almak
veya ayarlamak için geçerli olup olmadığını belirten mode
parametresiyle birlikte setPublic()
,
setProtected()
veya setPrivate()
kullanılarak ayarlanabilir. Varsayılan mod 'get'
şeklindedir.
Bu üretir:
İsim Alanı
Sınıflar, özellikler, arayüzler ve enumlar (bundan sonra sınıflar olarak anılacaktır) isim alanları (PhpNamespace) halinde gruplandırılabilir:
Sınıf zaten mevcutsa, istisna atar.
Kullanım ifadelerini tanımlayabilirsiniz:
Tam nitelikli bir sınıf, fonksiyon veya sabit adını tanımlanan takma adlara göre basitleştirmek için
simplifyName
yöntemini kullanın:
Tersine, resolveName
yöntemini kullanarak basitleştirilmiş bir sınıf, fonksiyon veya sabit adını tam
nitelikli bir ada dönüştürebilirsiniz:
Sınıf Adları Çözülüyor
Bir sınıf bir isim alanının parçası olduğunda, biraz farklı şekilde işlenir: tüm tipler (örneğin, tip ipuçları, dönüş tipleri, ana sınıf adı, uygulanan arayüzler, kullanılan özellikler ve nitelikler) otomatik olarak çözülür (kapatmadığınız sürece, aşağıya bakın). Bu, tanımlarda tam nitelikli sınıf adları kullanmanız gerektiği anlamına gelir ve bunlar sonuçta ortaya çıkan kodda takma adlarla (use cümlelerine dayalı olarak) veya tam nitelikli adlarla değiştirilecektir:
Sonuç:
Otomatik çözümleme bu şekilde kapatılabilir:
PHP Dosyaları
Sınıflar, işlevler ve isim alanları PhpFile sınıfı tarafından temsil edilen PHP dosyaları içinde gruplandırılabilir:
Sonuç:
Lütfen dikkat: Dosyalara fonksiyonlar ve sınıflar dışında hiçbir ek kod eklenemez.
Mevcut Olanlara Göre Üretme
Yukarıda açıklanan API'yi kullanarak sınıfları ve fonksiyonları modelleyebilmenin yanı sıra, mevcut olanları kullanarak bunların otomatik olarak oluşturulmasını da sağlayabilirsiniz:
Fonksiyon ve metot gövdeleri varsayılan olarak boştur. Bunları da yüklemek istiyorsanız, şu yolu kullanın (
nikic/php-parser
adresinin yüklenmesini gerektirir):
PHP Dosyasından Yükleme
Fonksiyonları, sınıfları, arayüzleri ve enumları doğrudan bir PHP kodu dizisinden de yükleyebilirsiniz. Örneğin,
ClassType
nesnesini bu şekilde oluşturuyoruz:
PHP kodundan sınıflar yüklenirken, yöntem gövdelerinin dışındaki tek satırlık yorumlar yok sayılır (örneğin, özellikler vb. için) çünkü bu kütüphanenin bunlarla çalışmak için bir API'si yoktur.
Ayrıca, istediğiniz sayıda sınıf, işlev ve hatta birden fazla ad alanı içerebilen PHP dosyasının tamamını doğrudan yükleyebilirsiniz:
İlk dosya yorumu ve strict_types
bildirimi de yüklenir. Öte yandan, diğer tüm global kodlar yok
sayılır.
Bunun için nikic/php-parser
adresinin yüklenmesi gerekir.
Dosyalardaki genel kodu veya yöntem gövdelerindeki tek tek ifadeleri değiştirmeniz gerekiyorsa,
nikic/php-parser
kütüphanesini doğrudan kullanmak daha iyidir.
Sınıf Manipülatörü
ClassManipulator sınıfı, sınıfları manipüle etmek için araçlar sağlar.
inheritMethod()
yöntemi, bir üst sınıftaki veya uygulanan arayüzdeki bir yöntemi sınıfınıza kopyalar.
Bu, yöntemi geçersiz kılmanıza veya imzasını genişletmenize olanak tanır:
inheritProperty()
yöntemi, bir özelliği bir üst sınıftan sınıfınıza kopyalar. Bu, sınıfınızda aynı
özelliğe sahip olmak, ancak muhtemelen farklı bir varsayılan değere sahip olmak istediğinizde kullanışlıdır:
implement()
yöntemi, verilen arayüz veya soyut sınıftaki tüm yöntem ve özellikleri otomatik olarak
uygular:
Değişkenler Damperi
Dumper, bir değişkenin ayrıştırılabilir bir PHP dize gösterimini döndürür. Yerel işlevden daha iyi ve daha net
çıktı sağlar var_export()
.
Uyumluluk Tablosu
PhpGenerator 4.1 PHP 8.0 ila 8.4 ile uyumludur.