Alesta WEB

Kısa cevap: PHP 8.6 sürüm adayı (RC) aşamasında ve kararlı sürümün 19 Kasım 2026'da çıkması planlanıyor. Ekim başında RC3 yayımlandı. Öne çıkan yenilikler: Partial Function Application (? ve ... yer tutucularıyla fonksiyonu kısmen çağırıp Closure üretmek), yeni clamp() fonksiyonu, readonly özelliklere varsayılan değer verebilme, sınıf sabitlerinde #[\Override], SortDirection enum'u ve SQL'e güvenli değer koymak için mysqli_quote_string(). RC sürümleri canlı ortam için değil; test ortamında denemek için doğru zaman.

Sürüm takvimi (PHP 8.6 release schedule)
PHP'de her yıl Kasım ayında bir küçük sürüm (minor release) çıkıyor. 8.6 için de takvim aynı. Ekip Eylül sonunda özellik dondurmasından sonra RC1'i, Ekim başında RC3'ü yayımladı. PHP wiki'deki takvimde RC4 için 5 Kasım, kararlı sürüm (GA) için 19 Kasım 2026 yazıyor. Takvimin ilerleyişe göre değişebileceği de not edilmiş.
RC aşamasında yeni özellik eklenmiyor; yalnız hata ve bellek güvenliği düzeltmeleri yapılıyor. Yani bugün RC'de gördüğünüz özellik listesi büyük olasılıkla kararlı sürümün listesi olacak. Kendi kodunuzu ve kullandığınız paketleri şimdiden test etmek, Kasım'da sürpriz yaşamamanın en kısa yolu.
Partial Function Application (PFA v2)
8.6'nın en büyük dil yeniliği bu. Bir fonksiyonu bazı argümanlarını boş bırakarak çağırdığınızda PHP fonksiyonu çalıştırmıyor, kalan argümanları bekleyen bir Closure döndürüyor. İki yer tutucu var:
?tam olarak bir argümanın yerini tutar....kalan sıfır ya da daha fazla argümanın yerini tutar ve en sonda yer alır.
function selamla(string $selam, string $ad, string $isaret = '!'): string
{
return "$selam, $ad$isaret";
}
$merhaba = selamla('Merhaba', ?);
echo $merhaba('Ayşe'); // Merhaba, Ayşe!
$hey = selamla('Hey', ...);
echo $hey('Can', '?'); // Hey, Can?
// Geri çağırma (callback) ile kullanımı
$kodlar = array_map(str_pad(?, 5, '0', STR_PAD_LEFT), ['7', '42']);
// ['00007', '00042']Son örnek PFA'nın günlük kodda en çok işe yarayacağı yeri gösteriyor. Eskiden fn($x) => str_pad($x, 5, '0', STR_PAD_LEFT) yazmak gerekiyordu; şimdi yer tutucu aynı işi görüyor. PHP 8.5 ile gelen pipe operatörü (|>) ile birlikte kullanıldığında zincirleme dönüşümler çok daha kısa yazılıyor.
Hiç yer tutucu bırakmadan ... ile yapılan çağrı ise "thunk" üretiyor, yani çalışmayı sonraya erteleyen argümansız bir Closure. Adlandırılmış argümanlar da kullanılabiliyor; tek kural, adlandırılmış bir argümandan sonra konumsal ? yazılamaması. RFC 33'e 0 oyla kabul edildi.
clamp() fonksiyonu
Bir değeri iki sınır arasında tutmak, form doğrulamadan sayfalama hesabına kadar her projede yazılan küçük bir yardımcıydı. PHP 8.6 bunu çekirdeğe ekliyor:
clamp(mixed $value, mixed $min, mixed $max): mixed
clamp(2, min: 1, max: 3); // 2
clamp(0, min: 1, max: 3); // 1
clamp(6, min: 1, max: 3); // 3
clamp("a", "c", "g"); // "c"
$sayfa = clamp((int) ($_GET['sayfa'] ?? 1), 1, $toplamSayfa);$min değeri $max'tan büyükse ya da sınırlardan biri NAN ise fonksiyon ValueError fırlatıyor. Değerin kendisi NAN ise olduğu gibi geri dönüyor. Projede kendi clamp() fonksiyonunu küresel ad alanında tanımlamış olanlar dikkat: 8.6'da aynı adlı çekirdek fonksiyonla çakışma "cannot redeclare" hatasına yol açar. Böyle bir tanımı function_exists kontrolüne almak ya da ad alanına taşımak gerekiyor.
readonly özelliklere varsayılan değer (Readonly property defaults)
PHP 8.1'den beri readonly özelliklere varsayılan değer yazmak derleme hatası veriyordu. 8.6 bu kısıtı kaldırıyor. Özellikle PHP 8.4'teki arayüz özellikleriyle (interface properties) birlikte anlam kazanıyor: sabit bir değeri arayüzü karşılamak için kurucu metot yazmadan verebiliyorsunuz.
interface Gorev
{
public string $etiket { get; }
public int $deneme { get; }
}
final readonly class EpostaGorevi implements Gorev
{
public string $etiket = 'E-posta gönder';
public int $deneme = 3;
public function __construct(private string $sablon) {}
}Varsayılan değer özelliğin başlatılması sayılıyor; kurucu metot bu değeri değiştiremiyor. clone sırasında ise bir kez yeniden atanabiliyor. Yeni bir söz dizimi yok, yalnız eski kısıt kalkıyor. RFC 24'e 0 oyla kabul edildi.
Diğer yenilikler (Other changes)
- Sınıf sabitlerinde
#[\Override]: Alt sınıftaki sabitin gerçekten üst sınıftaki ya da arayüzdeki bir sabiti ezdiğini garanti eder. Ezilecek sabit yoksa PHP hata verir. Yöntem ve özelliklerdeki davranışla aynı. SortDirectionenum'u:SortDirection::AscendingveSortDirection::Descendingdurumlarını içeren küresel bir enum. Şimdilik çekirdek fonksiyonlar kullanmıyor; sorgu oluşturucu gibi kütüphanelerin ortak bir tür paylaşması amaçlanıyor.mysqli_quote_string()/$mysqli->quote_string():real_escape_stringgibi kaçış uygular ve sonucu tek tırnak içine alır. RFC,NO_BACKSLASH_ESCAPESSQL modunda çift tırnaklı eski kalıbın enjeksiyona açık kaldığını, yeni fonksiyonun bunu önlediğini gösteriyor. Yine de ilk tercih hazırlanmış sorgular (prepared statements) olmalı.json_decodehata konumu: JSON çözme hataları artık hatanın metindeki konumunu da bildiriyor. Büyük API yanıtlarında hata ayıklamayı kısaltıyor.grapheme_strrev(): Emoji ve birleşik karakterleri bozmadan metni ters çeviren intl fonksiyonu.trim()ailesi:trim,ltrim,rtrimvechopartık form besleme karakterini (\f) de varsayılan olarak siliyor.pack()/unpack(): kayan noktalı sayılar ve işaretli tamsayılar için bayt sırası (endianness) belirteçleri eklendi.
Geçişte dikkat edilecekler (Migration notes)
__construct()ve__destruct()'tan değer döndürmek kullanımdan kaldırıldı (deprecated). Eski koddareturn $this;gibi satırlar uyarı üretecek.array_filter()'a geçersiz$modedeğeri verilirse artıkValueErrorfırlatılıyor.- mbregex: Oniguruma kütüphanesinin bakımı sona erdiği için
mb_ereg*fonksiyonlarının yol haritası değişiyor. Bu fonksiyonları kullanan kodupreg_*ailesine taşımayı planlamak mantıklı. - Kendi adlarınız: küresel ad alanında
clampfonksiyonu ya daSortDirectionsınıfı tanımladıysanız çakışma olur.
Test için en pratik yol, RC sürümünü Docker imajı ya da ayrı bir PHP-FPM havuzuyla çalıştırıp mevcut test paketini koşmak. Alesta WEB'de yeni PHP sürümlerini önce test ortamındaki kopyalarda çalıştırıyor, hata günlükleri temiz kaldıktan sonra canlı sitelere geçiriyoruz. PHP 8.5'ten 8.6'ya geçiş, 8.x serisindeki önceki geçişler gibi büyük kırılma içermiyor.
Sık sorulan sorular
PHP 8.6 ne zaman çıkıyor?
Resmî takvime göre kararlı sürüm 19 Kasım 2026'da bekleniyor. Şu an sürüm adayı aşamasında.
RC sürümünü canlı sitede kullanabilir miyim?
Hayır. PHP ekibi RC sürümlerinin yalnız test için olduğunu açıkça belirtiyor.
Partial Function Application, arrow function'ın yerini mi alıyor?
Hayır, ikisi birlikte var olacak. PFA tek bir fonksiyon çağrısını sarmalamak için daha kısa bir yazım sunuyor; birden fazla işlem gereken yerde arrow function yine gerekli.
Laravel ve Symfony 8.6'yı destekliyor mu?
Büyük çatılar genellikle yeni PHP sürümünü çıkışından kısa süre sonra resmî olarak destekliyor. Kendi projenizde composer.json'daki php kısıtını ve bağımlılıkların sürüm notlarını kontrol edin.
Kaynaklar (References)
İlgili yazılar: PHP 8.5 yenilikleri · PHP 8.4 property hooks · Laravel 12 · Web yazılım hizmetleri · İletişim
Kapak fotoğrafı: Ben Griffiths / Unsplash

