2 puan yazan GN⁺ 2025-11-21 | 1 yorum | WhatsApp'ta paylaş
  • PHP 8.5, pipe operatörü, clone with, yeni URI ayrıştırıcısı gibi çeşitli özellikleri içeren büyük bir güncelleme sürümü
  • Pipe operatörü, fonksiyon çağrı zincirlerini basitleştirerek okunabilirliği ve bakım kolaylığını artırır
  • Clone with özelliği, nesne kopyalanırken özellik değerlerinin aynı anda değiştirilebilmesini sağlar; ancak bazı readonly özellikler için kısıtlamalar vardır
  • #[NoDiscard], (void) cast, closure sabit ifadeleri desteği, fatal error backtrace çıktısı gibi geliştirici kolaylığı sağlayan özellikler güçlendirildi
  • Dizi işleme, özellik doğrulama, standart dışı cast’lerin kaldırılması gibi ayrıntılı iyileştirmeler ve geriye dönük uyumlulukla ilgili değişiklikler içeren bir sürüm

Başlıca yeni özellikler

  • Pipe operatörü (|>) ile bir fonksiyonun sonucunu doğrudan bir sonraki fonksiyona aktaran zincirleme kod yazımı mümkün

    • İç içe fonksiyon çağrıları yerine veriyi adım adım dönüştüren bir yapı sunar
    • Örnek kodda trim, str_replace, strtolower gibi işlevler sıralı şekilde bağlanır
  • Clone with sayesinde nesne kopyalanırken özellik değerleri aynı anda değiştirilebilir

    • Örnek Book sınıfında clone($this, ['title' => $title]) biçiminde kullanılır
    • Ancak dışarıdan readonly özellikler kopyalanırken public(set) erişim belirleyicisi gerekir
  • #[NoDiscard] niteliği ve (void) cast eklendi

    • Dönüş değerinin yok sayılması durumunda uyarı üreten fonksiyonlar işaretlenebilir
    • (void) cast kullanılarak bu uyarı bastırılabilir
  • Closure iyileştirmeleri ile sabit ifadeler içinde closure ve first-class callable object kullanılabilir

    • Örnekte bunlar #[SkipDiscovery(static function (...))] biçiminde nitelik içinde tanımlanır
    • Bu closure’lar mutlaka static olarak tanımlanmalı ve dış değişkenlere erişemez
  • Fatal error backtrace çıktısı özelliği eklendi

    • Daha önce gösterilmeyen stack trace bilgisi artık hata mesajına dahil edilerek hata ayıklamayı kolaylaştırır

Dizi ve URI ile ilgili özellikler

  • array_first() ve array_last() fonksiyonları eklendi

    • Dizinin ilk ve son öğesini basitçe döndürür
    • Mevcut array_key_first() ve array_key_last() ile yapılan daha karmaşık erişim yöntemlerinin yerini alır
  • Yeni bir URI ayrıştırıcısı eklendi

    • Uri\Rfc3986\Uri sınıfı üzerinden getHost(), getScheme(), getPort() gibi metotlar sunar
    • URI işleme ve analizini basitleştirir

Özellik ve doğrulama ile ilgili işlevler

  • #[DelayedTargetValidation] niteliği kullanıma sunuldu
    • #[Override] gibi bazı niteliklerin doğrulama zamanını derleme zamanından çalışma zamanına ertelemek mümkün
    • Amaç, geriye dönük uyumluluk sorunlarını hafifletmek

Diğer küçük değişiklikler

  • Statik özelliklerde asimetrik görünürlük (asymmetric visibility) desteği
  • Sınıf dışı sabitlere de nitelik (attribute) eklenebilir
  • Constructor property promotion, final özellikler için de kullanılabilir
  • #[\Override] niteliği, özelliklere de uygulanabilir
  • Dom\Element::$outerHTML özelliği eklendi
  • Exif eklentisi, HEIF/HEIC görsellerini destekler
  • filter_var() çağrılarında FILTER_THROW_ON_FAILURE bayrağı eklendi

Kaldırılan ve uyumsuz değişiklikler

  • Standart dışı cast adları (boolean), (integer) vb. kullanımdan kaldırıldı
  • Backtick (``) kullanımının shell_exec() için takma ad olması kullanımdan kaldırıldı
  • Sabit yeniden tanımlama özelliği kullanımdan kaldırıldı
  • disabled_classes ini ayarı kaldırıldı
  • Tüm değişiklik ve kaldırma listesi PHP 8.5 yükseltme belgesinde görülebilir

Genel özet

  • PHP 8.5, kod okunabilirliği, hata ayıklama, nitelik işleme, dizi manipülasyonu gibi alanlarda genel geliştirme deneyimini iyileştiren bir sürüm
  • Pipe operatörü ve URI ayrıştırıcısı, gerçek dünya kodlarını sadeleştirmede doğrudan etkili
  • Nitelik doğrulamasının ertelenmesi, yeni dizi fonksiyonları ve backtrace çıktısı bakım kolaylığı ve kararlılığı artıran değişiklikler
  • Bazı standart dışı sözdizimleri ve ayarların kaldırılması nedeniyle kod temizliği gerekebilir
  • Genel olarak bu sürümün odağında dil tutarlılığını güçlendirmek ve geliştirici deneyimini iyileştirmek var

1 yorum

 
GN⁺ 2025-11-21
Hacker News yorumu
  • Ben hâlâ PHP'yi seviyorum
    23 yıl önce PHP için şifreleme yazılımı yaptım ve hâlâ gayet iyi çalışıyor
    Hâlâ bir PHP bülteni yürütüyorum ve topluluk da hâlâ güçlü
    Python ya da Node.js de kullanıyorum ama hızlı ve basit işler için sonunda yine PHP'ye dönüyorum
    Yalnız, PHP 5'ten sonra dilin çok daha karmaşık hâle gelmesi iki ucu keskin bir kılıç gibi

    • PHP'nin büyük bir dönüşümü doğru şekilde gerçekleştirmiş en iyi örneklerden biri olduğunu düşünüyorum
      Python 2'den 3'e geçerken PHP 5.2→5.3 ve 5.6→7.0 yönünde evrildi
      Namespace'ler, PSR0 autoloading, parser iyileştirmeleri gibi adımlarla hız ve yapı büyük ölçüde gelişti
      Her güncellemede uyumluluğu bozmadan kademeli iyileştirmeler yaptı; uyarılar ve shim'ler sağlayarak eski sürümlerin korunmasını da mümkün kıldı
      PHP 6'nın iptal edilmesinin nedeni string işleme değişikliğiydi; sonuçta bunun akıllıca bir karar olduğunu düşünüyorum
      Uzun süre geçimimi sağlayan bir dil ve topluluğa saygı duyan bir projeydi
    • Birçok kişi PHP'nin karmaşıklaştığını söylüyor ama benim 5.3 ile yazdığım basit kod PHP 8'de de kusursuz çalışıyor
      Karmaşık yazmak mümkün ama şart değil
    • Acaba o şifreleme yazılımı Zend miydi diye merak ediyorum
      2000'lerin ortasında Zend ile ilgili araçlarla uğraşmıştım; oldukça uğraştırıcı olduğunu hatırlıyorum
    • PHP 8, baştan doğru şekilde öğrenilirse yeterince anlaşılır
      PSR'leri öğrenip güvenlik ve özellikleri hesaba katınca çok daha istikrarlı ve güçlü bir dil hâline geldi
  • PHP 5 sonrası evrim etkileyici ama bununla birlikte artan karmaşıklık sorunu da var
    Eski sürümlerle öğrenenler için modern codebase'ler yabancı geliyor ve takip etmesi zor olabiliyor
    Bu topluluk için bir güç olsa da, geri dönmek isteyen geliştiriciler için bir engel oluşturuyor

    • Modern PHP'nin hâlâ okunabilirliği yüksek bir dil olduğunu düşünüyorum
      10 yıl boyunca C++ kullandım ama bugün modern PHP, modern C++ kodundan çok daha kolay okunuyor
    • PHP 8'i öğrenmek yeterli. Bugünün PHP'si eskisine göre çok daha iyi
    • Bugün çoğu yazılım benzer bir sorun yaşıyor
      Sadelik hedefi kaybolmuş gibi; sadece özellikler üst üste ekleniyor
    • Aslında bu değişim diğer diller için de geçerli
      Özellikle web alanı çok hızlı değişiyor; ayak uydurmazsan geride kalıyorsun
    • Java uzmanı olarak çalışırken bile yeni özellikleri ekip arkadaşlarıma açıklamam gereken çok oluyor
      PHP özellikle ilk web sitesini yapan acemiler tarafından çok kullanılan bir dil olduğu için, değişim diğer dillere kıyasla daha sert hissediliyor olabilir
  • Birçok insanın PHP'den utanma eğilimi var ama bende yok
    Dil hakkında çok şey bilmiyorum ama harika projeler olduğunu biliyorum
    Bugün en sevdiğim PHP projesi BookStack; aile vikisi olarak kullanıyorum
    İyi yönetilen PHP stack'leriyle kurulmuş çok sayıda site hâlâ var

    • Modern PHP hızlı ve harika bir dil
      2021~2023 arasında production PHP kullandım; dilin kendisinden çok sorun eski codebase'ler ve düşük maaş düzeyi idi
      PHP 4 döneminden kalma çok fazla miras kod var ve veri erişim kalıpları da birbirinden farklı olduğu için bakım zorlaşıyor
      Ama PHP 8'e geçiş sırasında kod kalitesi büyük ölçüde iyileşti
      Yeni bir proje başlatacak olsam PHP'yi seçmezdim ama modern bir Laravel projesi için memnuniyetle çalışırım
    • PHP sezgisel ve keyifli bir dildi
      Ama yeni başlayanların güvenlik kavramları olmadan kolayca kullanabilmesi nedeniyle SQL injection gibi sorunlar çok yaşandı; bu yüzden de “güvensiz dil” itibarı oluştu
    • JS/TS + modern framework'ler yerine PHP backend'i tercih ederim
      Laravel gibi framework'lerle birlikte çok daha istikrarlı ve olgun bir ortam sunuyor
    • Kariyerimi PHP ile kurdum ve bugün de onun modernleşme sürecinden keyif alıyorum
      Gitar çalmak ya da şiir yazmak gibi; herkes yapabilir ama iyi yapmak zordur
    • AzuraCast'ı seviyorum
      Koda doğrudan bakarak öğrenmek ve radyo/müzik sunucusunu self-host etmek eğlenceli
  • PHP güncellendikçe daha karmaşık bir dil oldu
    Hâlâ web merkezli bir dilken neden böyle evrildiğini merak ediyorum

    • C# ve Java da web backend odaklı oldukları için karmaşıklaştı
      Sonuçta geleneksel nesne yönelimli dillerin benzer bir yöne yakınsadığını düşünüyorum
    • Web'in kendisi artık giderek daha az basit
    • NativePhp gibi projeler de var
      Sadece web için bir dil olsa bile gelişmek için yeterince sebep var. Geliştirici deneyimini iyileştirmek her zaman değerli
    • İlk başta yazıyı okumadan eleştirmiştim ama tekrar bakınca bazı özellikler fena değil
      array_first(), array_last() kullanışlı ama pipe operator bakım yapılabilirliğini zedeleyebilir
      Yalnızca unary function'ları desteklediği için karmaşık fonksiyonlarda tersine hata üretmeye daha açık olabilir
  • PHP 8.5 duyurusundaki en ilginç şey, dilin istikrarı ve olgunluğu

  • PHP'nin GTA6'dan önce array_first, array_last, fatal error stack trace eklemesi şaşırtıcı

    • Güzel eklemeler ama aslında array_shift ya da array_pop ile de çoğu şey yapılabiliyordu
  • PHP'ye sürekli yeni fonksiyonlar ve sözdizimi eklenmesi uzun vadede bakım maliyetini artırıyor
    resmî sürüm notlarına bakınca bazı özelliklerin değeri belirsiz görünüyor

    • URI uzantısı hızlı ama mevcut parse_url() ile örtüşüyor
    • Pipe operator bir tercih meselesi ve kod stili tutarlılığını bozabilir
    • clone iyileştirmesi çok küçük bir değişiklik
    • #Discard/void, statik analiz araçlarının işlevini ikame ediyor
    • Sabitler içindeki closure'lar ilginç ama karmaşık özelliklere (#attribute) kapı açabilir
    • Kalıcı cURL handle'ları gerçekten performans artışı sağlayan bir unsur
    • array_first() daha çok sözdizimsel şeker gibi; büyük projelerde pek kullanılmayabilir
  • Resmî PHP 8.5 sürüm notları

  • Pipe operator örnekleri, çoğu dilde geçici değişken kullanılarak yapılan sıradan yaklaşımı atlıyor
    URL ayrıştırma örneği de parse_url() ile doğrudan karşılaştırılmamış

    • parse_url() standartlara tam uymaz ve göreli URL'leri işlemede zayıftır
      Yeni uri() fonksiyonu daha temiz görünüyor; partial function application eklendiğinde pipe chain'ler daha okunabilir olacaktır
  • PHP CLI'da **backtick() ile shell_exec() çağırırdım**, artık deprecated oldu mkdir $dirname` gibi şeyleri sık kullanırdım

    • Bu güvenlik açısından bir anti-pattern
      Shell metacharacter injection riski nedeniyle PHP'nin mkdir() ya da pcntl_exec() fonksiyonlarını kullanmak gerekir