PHP 8 ile gelen ve her gün kullandığım özellikler
PHP'nin son sürümleri dili epey değiştirdi. match, enum, readonly, kurucu parametrelerinden özellik tanımlama ve nullsafe operatörü artık kodumun her yerinde. Örneklerle anlatıyorum ve sürüm desteğine de değiniyorum.
PHP hakkındaki önyargıların çoğu 5.x döneminden kalma. 8.x serisi, tip sistemi ve sözdizimi açısından dili gerçekten modernleştirdi. Bu siteyi de yazarken her gün kullandığım özellikleri derledim.
Kurucuda özellik tanımlama (8.0)
final class Mesaj
{
public function __construct(
public readonly string $ad,
public readonly string $eposta,
private bool $okundu = false,
) {}
}
Özelliği tanımla, kurucuda al, ata: üç adım tek satırda. readonly (8.1) ile de nesne oluşturulduktan sonra değer değiştirilemez.
match (8.0)
$etiket = match ($durum) {
'yayin' => 'Yayında',
'taslak' => 'Taslak',
default => 'Bilinmiyor',
};
switch'ten farkı: değer döndürür, sıkı karşılaştırma yapar ve break unutma riski yoktur.
Enum (8.1)
enum Durum: string
{
case Yayin = 'yayin';
case Taslak = 'taslak';
public function etiket(): string
{
return match ($this) {
self::Yayin => 'Yayında',
self::Taslak => 'Taslak',
};
}
}
$d = Durum::from($satir['durum']);
Veritabanından gelen dizeleri her yerde elle karşılaştırmak yerine tipli bir değerle çalışırsınız.
Nullsafe operatörü (8.0)
$sehir = $kullanici?->adres?->sehir;
İç içe null kontrollerine son.
Küçük ama sık kullanılanlar
str_contains(),str_starts_with(),str_ends_with()(8.0):strpos() !== falsedevri bitti.- İsimli argümanlar (8.0):
htmlspecialchars($s, double_encode: false). neverdönüş tipi (8.1): Yönlendirme ya da hata fırlatan fonksiyonlar için.- Birinci sınıf çağrılabilir sözdizimi (8.1):
array_map(trim(...), $liste).
Sürüm desteği
PHP 8.1'in güvenlik desteği 2025 sonunda bitti; 8.2'ninki de 2026 sonunda bitiyor. Yeni projelere en güncel kararlı sürümle başlamak, mevcutlar için de yükseltmeyi takvime koymak gerekiyor.