PHP 8.5 ile gelenler: pipe operatörü, clone with, #[\NoDiscard] ve güvenlik açısından notlar

Sabit admin açtı, 3 gün önce 0 yanıt 9 görüntülenme
admin Admin
  • 0 mesaj
  • 1K puan
  • Katılım 12.2025
  • Konu sahibi

PHP 8.5, 20 Kasım 2025'te yayımlandı ve artık çoğu barındırma firmasında seçilebiliyor. Günlük kodu en çok etkileyen yenilikleri ve geçişte dikkat edilmesi gerekenleri örneklerle derledim.

Pipe operatörü |>

İç içe fonksiyon çağrılarını soldan sağa okunur hale getiriyor:

$baslik = ' PHP 8.5 Yayımlandı ';

$slug = $baslik
    |> trim(...)
    |> (fn($s) => str_replace(' ', '-', $s))
    |> (fn($s) => str_replace('.', '', $s))
    |> mb_strtolower(...);
// "php-85-yayımlandı"

Girdi temizleme zincirlerinde (trim, normalize, kaçışlama) adımları sırayla görmek kod incelemesini kolaylaştırıyor.

Clone with

readonly sınıflarda "değiştirilmiş kopya" üretmek artık kolay:

final readonly class Renk {
    public function __construct(public int $r, public int $g, public int $b, public int $alfa = 255) {}

    public function withAlfa(int $alfa): self {
        return clone($this, ['alfa' => $alfa]);
    }
}

#[\NoDiscard]

Dönüş değeri kullanılmadığında uyarı üreten bir öznitelik. Güvenlik açısından çok işe yarar: doğrulama sonucunu döndüren ama sonucu kontrol edilmeyen fonksiyonlar klasik bir hata kaynağıdır.

#[\NoDiscard]
function tokenGecerliMi(string $token): bool { /* ... */ }

tokenGecerliMi($_POST['csrf_token']);   // Uyarı: dönüş değeri kullanılmadı
if (!tokenGecerliMi($_POST['csrf_token'])) { http_response_code(419); exit; }   // doğru

Bilerek yok saymak isterseniz (void) dönüşümü kullanılıyor.

Diğer yenilikler

  • URI eklentisi: RFC 3986 ve WHATWG standartlarına uygun yerleşik URL ayrıştırma (Uri\Rfc3986\Uri). Bunu SSRF'ye karşı URL doğrulamada kullanmayı ayrı bir konuda ele alacağım.
  • array_first() ve array_last().
  • Ölümcül hatalarda (örneğin süre aşımı) artık yığın izi var; hata ayıklama kolaylaşıyor. Üretimde display_errors kapalı olmalı ki bu iz kullanıcıya gösterilmesin.
  • setcookie() artık partitioned anahtarını (CHIPS) destekliyor.
  • Kalıcı cURL paylaşım tanıtıcıları ile istekler arasında DNS ve bağlantı önbelleği.

Geçişte dikkat

  • Ters tırnak operatörü (`komut`, shell_exec() takma adı) kullanımdan kaldırıldı. Eski kodlarda bunu arayın; zaten komut enjeksiyonu açısından riskli bir kalıptı.
  • (boolean), (integer), (double) gibi standart dışı tür dönüşümleri kullanımdan kaldırıldı; (bool), (int), (float) kullanın.
  • Dizi anahtarı olarak null kullanımı kullanımdan kaldırıldı.
  • disable_classes ini ayarı kaldırıldı; paylaşımlı sunucularda sertleştirme için buna güveniyorsanız başka bir yöntem gerekir.

Projelerinizi 8.5'e taşırken karşılaştığınız uyumsuzlukları burada toplayalım.

Kaynaklar

Yanıt yazmak için giriş yap. Giriş yap Hesap oluştur