Bu hafta PHP İç Yapıları’nda önemli gelişmeler yaşandı. PHP dünyasında yer alan yazılımcılar için bazı güncellemeleri ve yenilikleri inceleyeceğiz.
Bu haftanın en büyük hikayesi, kapıyı çalan yeni bir anahtar kelime: extension. Larry Garfield, Kotlin tarzı uzantı fonksiyonlarını önerdikten bir hafta sonra, Holly Schilling, Swift tarzı sınıf uzantıları üzerinde çalışan prototiplerle geldi. Bu fikir, kendisinin bir Discord konuşmasından doğmuş. Amaç: Sahip olmadığınız bir sınıfa yöntemler eklemek — extension \DateTimeImmutable, her tarihe bir isWeekend() ekliyor. Gelecek aşamada, sayısallara da yöntem eklemek hedefleniyor; örneğin, "hello" için bir length(). Üç taslak RFC’yi duyurarak, bunun yanında uygulama da sunmuş oldu. Michael Morris, ilk soruyu yöneltti: “Swift’in uzantı sözdizimine baktığımda, yukarıda belirtilenden farklı olarak ne eklediğini göremiyorum” dedi — yukarıda belirtilenler kalıtım ve trait’lerdi. Holly, “Bir uzantı, esasen bir trait’in tersidir” diyerek yanıt verdi. Traitlerde, sınıfın yazarının kararı geçerken, uzantılarda kullanıcının kararı geçerli.
İki gün sonra Holly, kendi sayısal yöntemler uygulamasını desteklemekte zorlandı ve şöyle yazdı: “Bu sabah bu e-postayı yazarken ihtiyat duyuyorum. Kendi uygulamamı destekleyemiyorsam, başkaları da desteklememeli.” Hemen daha iyi bir versiyon oluşturmaya başladı; bu versiyon C# 14’ten, yeni uzantı söz diziminden ilham aldı. extension string $str ile alıcı tanımın içine yerleştiriliyor — otomatik kutulama ya da alt sınıf sorunları yok. Üç taslağı bir günde yeniden yazdı. Ancak her şey bu kadar sorunsuz geçmedi: Alex Rock, açık bir extend ... with ... bağlantı ifadesini önerdiğinde, Holly, “Bu işlevselliği reddediyorum” diyerek yanıtladı — uzantılar dosya kapsamlı kalıyor ve asla gerçek bir yöntemi geçersiz kılmıyor.
Gina P. Banyard’ın PHP 8.6 için Reddedilenler listesi, haziranda yoğun tartışmaların ardından nihayet kapanma aşamasına geldi. Gina, RFC’yi “dondurulmuş” olarak ilan etti; yalnızca küçük değişiklikler kabul edilecek, tüm tarihler belirlendi. “Önümüzdeki pazartesi (20.) aşağıdaki pazartesi (27.) için oylama çağrısı başlatacağım, böylece oylama 10 Ağustos’ta tamamlanacak” diye açıklamada bulundu. Teklifler son hafta da eklenmeye devam ettiğinden, politikanın iki haftalık tartışma süresi, zamanlamayı belirliyor.
Paul M. Jones’un fonksiyon otomatik yükleme girişimi, bu hafta kasıtlı olarak daha da küçüldü. Geçen hafta eklediği declare(strict_namespace=1) talimatı, Tim Düsterhus’tan yapısal bir itiraz aldı. Tim, “strict_namespace=1 direktifinin yeterince ilgisiz bir konu olduğunu, bu nedenle kendi RFC’sinin bir ön koşul olması gereken büyük bir tartışma potansiyeli olduğunu düşünüyorum” dedi. Paul, bu konuda bir ayrım yapmadı ve “Tamam, bunun ayrı bir RFC olacağını hazırlayacağım” şeklindeki yanıtıyla kabul etti—Salı akşamı, strict-namespace artık wiki’de kendi RFC’si olarak mevcut.
Tim Düsterhus ve Derick Rethans’ın Time\Duration sınıfı, oylama tarihine doğru gidiyor; ilk reddi aldı. Pierre Joye, fromSeconds() ve sınırlı nanosecond argümanı üzerinde çalışarak, “Bu RFC’yi seviyorum, fakat basit bir ilk adım olarak karmaşalar ve kısıtlamalar getiriyor. Böylesi bir haliyle, bunu görmek isterdim; ama “hayır” diyorum.” dedi. Tim, zaman ölçümünün doğal olduğunu savundu: “Usain Bolt’un 100 m dünya rekorunu “9 saniye 58 yüzdelik” ile kırdığı söylenirken, bu fromSeconds()‘ın kullandığı sabit sayısal biçim ile aynı.” Pierre, “Gerçek dünyada yalnızca birim içinde süre bilgisi sunma durumu da oldukça yaygındır” diyerek karşılık verdi.
İlk kez yazar olan Caleb White, RFC karizmasını Ilija Tovilo’dan aldı; önerisi — pipe assignment operator, |>= — inceleme aşamasından hızla geçti. Fikir: $x |>= trim(...), $x’yi geçirir ve sonucu geri alır. Tim Düsterhus, yapıyı beğenisini ileterek, “Fonksiyon çağrıları için ‘yerinde değiştirme operatörü’ bulma fikrini seviyorum” dedi. Şimdi dikkat, bu isimlendirme konusunda gerçek enerji harcandı. Ben Ramsey, “|> ‘yıldırım operatörü’, |>= ise ‘patlayan volkan operatörü’ olarak düşünmeyi seviyorum” teklifinde bulundu.
Önceden planlanan bir öneriyle Marc Henderkes, PHP’nin çift yaşamını sona erdirmek istiyor. Ön-RFC’si: ZTS — thread-safe yapıyı – varsayılan olarak atamak, geri kalanını bırakmak ve PHP 9’da NTS’yi tamamen kaldırmak. Kısaca özetledi: “Özetle: herkes iki yapıyı sürdürmek istemiyor ve zorunlu bir ayrım işleri zorlaştırıyor.” Distrolar yalnızca NTS paketlemekte, FrankenPHP ZTS’ye ihtiyaç duyuyor ve php-src yaklaşık 420 ZTS ifadesini içeriyor. Performans farkı ise azalıyor; Marc’ın rakamlarına göre: “PHP 8.5’te en kötü durumda ZTS’nin performans maliyeti ~%5’ti, bu %1.5 olacak gibi görünüyor.” Ayrıca FPM’yi de de-sonlandırma önerisi getirmiyor; tek iş parçacıklı ZTS, NTS’nin bugünkü yaptığı her şeyi tutuyor. Marc, wiki’de tam RFC yazabilmek için onay talep etti.
Nicolas Grekas’ın seri hale getirilebilir closure’ları, bu hafta derin bir incelemeden geçerek bazı zorluklarla karşılaştı. Tim, “RFC’yi okurken, belirli bir kullanım senaryosunda aşırı uyumlu hale geldiğini hissettim” dedi. Ancak her iki taraf gerçek değişiklikler üzerinde uzlaşmaya vardı; Nicolas, Tim’in etiketli birleşim serileştirme formatını benimsedi. Salı akşamı Ilija Tovilo, “Bu RFC’ye karşıyım, çünkü özelliklerin önbelleğe alınmasına ihtiyaç olup olmadığı konusunda soru işareti var.” diye yazdı.
Bu hafta oylama açığı yoktu, bunun yerine tarih belirtilmiş durumda. Eric Norris’un minimum desteklenen sürümleri oylamaya açık olacak. Duration soğuma süresini geçecek ve bu hafta geç ortalama açılabilir. Reddedilenler listesi, oylama tarihlerini 20’sinde belirtiyor ve oy kullanma tarihlerinin 27’sinde olmasını istiyor. Khaled Alam’ın const-object-property-write RFC’si 25 Temmuz’da açılacak. Yine de bu, oylamaya götürmeden önce tüm tartışmaların bitirilmesi gerektiği yönündeki hatırlatma ile örtüşüyor.
Kısa bilgiler, birinci tur. Máté Kocsis, query parameters RFC’sini daha basit hale getirerek yeniden canlandırdı. Şu an kullanmakta olduğu API’yi yalnızca iki — belki üç — yöntemle sınırlandırmak. fromArray() ve toArray() gibi; dördüncü olarak withArray() bulunabilir. Nick Sdot’ın readonly-property varsayımlarıyla bir geri dönüşü olmadı. Holly Schilling, içeriğin asimetrik setterlarının halka açık olandan yaklaşık 4 kat daha yavaş çalıştığını görüp bir düzeltme önerdi. Düzeltmesini rasmi bir RFC ile sundu. Marc Henderkes ve Calvin Buckley, iç bir değiştirme gerektiren bir durumun neden RFC gerektirdiğini sorguladılar.
Özetle, bu hafta: extension anahtar kelimesi kendini yeniden yazdı; reddolmuş bir liste bu hafta donduruldu; fonksiyon otomatik yüklemesi, gereksinimlerini sadeleştiriyor; ayrıca Duration oylama açısı oluşturmak üzere. Oylama başlamadan önceki son hatırlatmamızı yapıyoruz. PHP 8.6 için önerilen her RFC, tartışmanın tamamlanıp oyların kapatılmasından önce yapılmalıdır. Soft özellik dondurması: 11 Ağustos. Beta 1: 13 Ağustos.
Bağlantılar her bir konu için aşağıdadır.
Kaynak: Orijinal Makale


