PHP 8.4, Kasım 2024'te yayınlanan ve dilin nesne modelinde yıllardır beklenen iki büyük değişikliği — property hooks ve asimetrik görünürlük — nihayet hayata geçiren sürüm oldu. PHP 8.0 ile başlayan modernleşme çizgisinin en iddialı halkalarından biri olan 8.4, yalnızca sözdizimi şekeri sunmuyor; getter/setter kalabalığı ve savunmacı kapsülleme kodu gibi PHP projelerinde onlarca yıldır tekrarlanan kalıpları kökünden değiştiriyor. Bu yazıda sürümün öne çıkan tüm yeniliklerini geliştirici gözüyle inceliyoruz.
PHP 8.4 ile Gelen En Büyük Yenilik: Property Hooks
Property hooks, bir sınıf özelliğinin okunma ve yazılma davranışını doğrudan özelliğin tanımında belirtmeye imkan tanıyor. Artık bir özelliğe get ve set kancaları ekleyerek, değer okunurken hesaplama yapmak veya yazılırken doğrulama uygulamak mümkün. Örneğin bir fullName özelliği, ad ve soyad alanlarından get kancasıyla anlık üretilebiliyor; bir email özelliği ise set kancasında doğrulamadan geçirilebiliyor.
Bu özelliğin pratikteki kazanımları şöyle özetlenebilir:
- Sıradan bir özellik, sınıfın dış arayüzü hiç değişmeden sonradan kancalı bir özelliğe dönüştürülebiliyor; çağıran kod etkilenmiyor.
- Kalabalık
getX()/setX()metot çiftlerine ve bakımı zor__get/__setsihirli metotlarına ihtiyaç azalıyor. - Arayüzlerde (interface) özellik bildirimi yapılabiliyor; böylece bir arayüz, uygulayan sınıftan belirli özellikleri okunabilir veya yazılabilir olarak talep edebiliyor.
array_find(): Verilen koşulu sağlayan ilk elemanı döndürür.array_find_key(): Koşulu sağlayan ilk elemanın anahtarını döndürür.array_any(): En az bir eleman koşulu sağlıyorsa true döner.array_all(): Tüm elemanlar koşulu sağlıyorsa true döner.
Benzer yetenekler Kotlin ve C# gibi dillerde uzun süredir mevcuttu; PHP bu adımla modern dillerle arasındaki farkı önemli ölçüde kapattı.
Asimetrik Görünürlük (Asymmetric Visibility)
İkinci büyük yenilik, bir özelliğin okuma ve yazma erişim seviyelerinin birbirinden ayrılabilmesi. public private(set) şeklinde bildirilen bir özellik dışarıdan serbestçe okunabiliyor, ancak yalnızca sınıfın kendi içinden yazılabiliyor.
Bu, özellikle değer nesneleri (value object) ve alan modeli (domain model) tasarlayanlar için önemli: daha önce salt okunur bir özellik sunmak için ya readonly kullanmak ya da özelliği private yapıp bir getter yazmak gerekiyordu. readonly özelliğin değeri bir kez atandıktan sonra sınıf içinden bile değiştirilemezken, asimetrik görünürlük sınıf içi güncellemeye izin verip yalnızca dışarıdan yazmayı engelliyor. İki mekanizma birbirini dışlamıyor, farklı senaryoları çözüyor.
Yeni Dizi Fonksiyonları
PHP 8.4, standart kütüphaneye dört pratik dizi fonksiyonu ekledi:
array_filter() ile dolaylı yoldan veya elle yazılan döngülerle yapılan işlemleri tek satıra indiriyor ve kodun niyetini çok daha okunur kılıyor.Modern Bir HTML5 Ayrıştırıcı
Eski DOMDocument sınıfının HTML5'i düzgün ayrıştıramaması, PHP ile web kazıma veya HTML işleme yapan herkesin bildiği kronik bir sorundu. PHP 8.4 ile gelen yeni Dom\HTMLDocument sınıfı, standartlara uygun bir HTML5 ayrıştırıcı sunuyor. Yeni DOM API'si ayrıca querySelector() ve querySelectorAll() gibi CSS seçici tabanlı, tarayıcı API'lerinden tanıdık metotları da destekliyor. Eski sınıflar geriye dönük uyumluluk için yerinde duruyor; yeni kodda modern API tercih edilmeli.
Diğer Öne Çıkanlar
Sürümün geri kalanında da kayda değer iyileştirmeler var:
new ile oluşturulan nesnenin üzerinde, ifadeyi ek parantezle sarmadan doğrudan metot çağrısı yapılabiliyor; new Rapor()->olustur() artık geçerli sözdizimi.mb_trim(), mb_ltrim() ve mb_rtrim() ile Unicode metinlerde güvenli boşluk kırpma nihayet standart kütüphanede.BcMath\Number sınıfı, keyfi hassasiyetli sayılarla aritmetik operatörler kullanarak çalışmaya imkan veriyor.request_parse_body(): PUT ve PATCH gibi isteklerde form verisini ayrıştırma ihtiyacına yerleşik yanıt.Kullanımdan Kaldırılanlar
En geniş etkili deprecation, örtük nullable parametre tipleri: varsayılan değeri null olan ama tipi nullable işaretlenmemiş parametreler (function f(int $x = null) gibi) artık uyarı üretiyor. Doğru kullanım tipi açıkça ?int yazmak. Bu kalıp eski kod tabanlarında çok yaygın olduğundan, yükseltme öncesi statik analizle taranması şart. Rector gibi otomatik dönüştürme araçları bu tür mekanik düzeltmelerin büyük bölümünü elle dokunmadan halledebiliyor.
Destek Takvimi ve Geçiş Planı
PHP'nin sürüm politikası gereği her ana sürüm önce aktif destek, ardından yalnızca güvenlik güncellemeleri alıyor; eski sürümlerin destek pencereleri daraldıkça 8.4'e geçiş yalnızca yenilik değil, güvenlik meselesi haline geliyor. Geçiş planlayan ekipler için makul yol haritası şu: önce bağımlılıkların 8.4 uyumluluğunu doğrulamak, ardından deprecation uyarılarını test ortamında ayıklamak ve son olarak üretime kademeli geçmek. Composer tabanlı modern projelerde bu sürecin maliyeti genellikle korkulduğundan düşük çıkıyor.
Yükseltmeye Değer mi?
Kesinlikle. Property hooks ve asimetrik görünürlük, framework ve kütüphane API'lerinin tasarımını önümüzdeki yıllarda görünür biçimde değiştirecek özellikler; yeni dizi fonksiyonları ve HTML5 ayrıştırıcı ise günlük işleri kolaylaştıran somut kazanımlar. Sürümün tam değişiklik listesi ve taşıma rehberi için php.net'teki resmi 8.4 sayfası incelenebilir.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yazın