30 Ekim 2026 - 17:47
PHP 8.5 Yenilikleri: Gerçek Kod Örnekleriyle Neler Değişti? Görseli
PHP

PHP 8.5 Yenilikleri: Gerçek Kod Örnekleriyle Neler Değişti?

0 Yorumlar

Bir metni temizlerken birkaç fonksiyonu peş peşe kullanıyoruz. Bir adresin yalnız yolunu değiştirmek istediğimizde ise parçaları elle birleştiriyoruz. PHP 8.5, bu tür işleri daha düzenli yazmak için yeni araçlar getiriyor. Bir de fonksiyondan gelen sonucu kullanmayı unuttuğumuzda bizi uyarabilen bir özellik var. Üçünü de küçük örneklerle görelim.

Örnekleri çalıştırmak için PHP 8.5 gerekiyor. Daha eski bir sürüm, yeni yazım biçimini tanımadığı için dosyayı çalıştırmadan hata verebilir. Bu yüzden önce php -v ile kullandığın sürüme bak. Yeniliklerin tam listesi resmi PHP 8.5 duyurusunda bulunuyor.

Pipe operatörü: işlem sırasını soldan sağa okuyalım

Bir metni önce boşluklardan temizlemek, sonra küçük harfe çevirmek, en son da kelimelerin arasına tire koymak istediğimizi düşün. Pipe operatörü, |> işaretiyle bu adımları sıraya dizer. Her adımın ürettiği değer bir sonraki fonksiyona gider:

PHP
<?php
$slug = '  PHP Runtime Guide  '
    |> trim(...)
    |> strtolower(...)
    |> (fn (string $text): string => str_replace(' ', '-', $text));

echo $slug, PHP_EOL;

Çıktı php-runtime-guide. trim(...) içindeki üç nokta “buraya kod ekle” demek değil. Fonksiyonu hemen çalıştırmak yerine sonraki adımda çağrılabilecek biçimde veriyoruz; bu yazımın teknik adı first-class callable. Son satırdaki fn ise isimsiz, kısa bir fonksiyon. Gelen metni alıp str_replace çağrısına yerleştiriyor. Böylece üç işlem de kendisine gelen tek değeri işleyebiliyor. Ayrıntılar pipe operatörünün belgesinde var.

Her işlemi pipe'a çevirmek zorunda değilsin. Aynı değeri birkaç yerde kullanacaksan ara değişken daha okunaklı olabilir. Bu kod da gerçek bir Türkçe slug üreticisi değil; karakter dönüşümü, tekrar eden boşluklar ve URL politikası için ek kurallar gerekir.

URI nesnesi: adresin parçalarını ayrı ele al

https://example.com/docs?page=2 adresinde https bağlantı türü, example.com alan adı, /docs yol, page=2 ise sorgu kısmı. Bunları explode() ile elle ayırmak her adres biçiminde aynı sonucu vermeyebilir. URI, bu tür adresleri tanımlamak için kullanılan genel ad. PHP 8.5'in URI eklentisi parçalarla ayrı çalışmamızı sağlıyor. Aşağıdaki sınıf, adresleri RFC 3986 adlı standardın kurallarına göre ele alıyor:

PHP
<?php
$uri = new \Uri\Rfc3986\Uri('https://example.com/docs?page=2');

echo $uri->getHost(), PHP_EOL;
echo $uri->withPath('/guides')->toString(), PHP_EOL;

İlk satır example.com, ikinci satır https://example.com/guides?page=2 üretir. Yeni yol atanırken sorgu kısmını elle birleştirmedik. Nesnenin mevcut halini değiştirmek yerine yeni bir değer elde ediyoruz. Sınıfın arayüzü Uri\Rfc3986\Uri belgesinde var.

Eklentide, tarayıcılarda kullanılan URL kurallarını temel alan WHATWG modeli de var. Bunlar aynı adres metnini her durumda aynı şekilde yorumlamak zorunda değil; uygulamanın ihtiyacına uygun modeli seç. Adresin parçalarının okunabilmesi, sunucunun o adrese istek göndermesine izin vermen gerektiği anlamına da gelmez. Kullanıcıdan adres alıyorsan hangi bağlantı türlerine ve hedeflere izin vereceğini ayrıca belirle.

NoDiscard: dönüş değerini unutmayalım

Bir indirim fonksiyonu düşün: 120 liradan 20 lira çıkarıp 100 döndürüyor ama elindeki fiyat değişkenini kendiliğinden değiştirmiyor. Fonksiyonu çağırıp dönen 100 değerini kullanmazsan indirim hesabı boşa gider. #[\NoDiscard], fonksiyonun üzerine eklenen ve “dönen sonucu kullanmayı unutma” diyen bir işaret. PHP'de bu tür işaretlere attribute deniyor. Baştaki \ de PHP'nin kendi NoDiscard sınıfını seçiyor:

PHP
<?php
#[\NoDiscard]
function applyDiscount(int $price, int $discount): int
{
    return max(0, $price - $discount);
}

$newPrice = applyDiscount(120, 20);
echo $newPrice, PHP_EOL;

Çıktı 100. Sonucu atamadan yalnız applyDiscount(120, 20); yazarsan dönüş değerinin kullanılmaması için uyarı alırsın. Bilerek yok saymak gerektiğinde (void) dönüşümü bu niyeti belirtir. Bu mekanizma tip sistemi veya testlerin yerine geçmez; unutulan bir kullanım biçimini yakalamaya yardımcı olur. Detaylar 8.5 yeni özellikler belgesinde yer alıyor.

Projeye taşırken sürüm sınırını koru

Kütüphanen 8.3 desteği veriyorsa pipe içeren bir dosyayı ana dağıtıma koyamazsın. Uygulama, CLI, test ortamı ve dağıtım hedefi birlikte 8.5'e hazır olmalı. Composer gereksinimini değiştirmek de gerçek sunucudaki çalıştırıcıyı yükseltmez.

Önce bu üç örneği küçük dosyalarda çalıştır. Ardından yalnız gerçekten okunabilirliği artıran bir noktayı projeye taşı. Kullanıcı girişini temizleme veya API adresi kurma gibi sınırlı bir bölüm, bütün kod tabanını bir seferde dönüştürmekten daha iyi bir başlangıçtır. Canlı geçiş öncesinde sürüm yükseltme kontrol listesini uygula.

Benzer Yazılar

Yorumlar (0)

Henüz yorum yok. İlk yorum yapan sen ol!

Yorum Yap