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()vearray_last().- Ölümcül hatalarda (örneğin süre aşımı) artık yığın izi var; hata ayıklama kolaylaşıyor. Üretimde
display_errorskapalı olmalı ki bu iz kullanıcıya gösterilmesin. setcookie()artıkpartitionedanahtarı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
nullkullanımı kullanımdan kaldırıldı. disable_classesini 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.
