Giriş
8.4 sürümü 21 Kasım 2024 tarihinde çıkması planlan PHP, artık eski bir teknoloji olduğunu ya da öldüğünü iddia edenlere inat, gelişmeye devam ediyor ve her yeni sürümle heyecan verici yeni özellikler ve iyileştirmeler sunuyor. Bu yenilikler yalnızca kod kalitesini artırmakla kalmıyor, aynı zamanda geliştiriciler için programlamayı daha keyifli hale getiriyor. Bu makalede, PHP 8.4 ile gelen ana özellikleri ve iyileştirmeleri keşfedeceğiz. Hadi başlayalım!
Property Hooks
Özellik Kancaları olarak çevirebileceğimiz Property Hooks, PHP 8.4'te sunulan güçlü bir yenilik. Geliştiricilerin, sınıf tanımlarında doğrudan özelliklere erişim ve ayarlama için özel davranışlar tanımlamasına olanak tanıyor. Bu özellik, sınıf varlıklarına erişirken veya bunları değiştirirken verilerin doğrulanmasını veya manipüle edilmesini kolaylaştırarak daha temiz ve bakımı kolay kodlar elde edilmesini sağlıyor.
Property Hooks Neden Faydalıdır?
-
Veri Doğrulama (Data Validation)
Bir özellik atanırken yalnızca geçerli değerlerin kullanılmasını sağlayabilir. -
Computed Properties
Varlıklara erişildiğinde, dinamik olarak değerleri hesaplayabilirsiniz. Örneğin, birden fazla alanı birleştirerek bir array oluşturabilirsiniz. -
Encapsulation (Kapsülleme)
Özellik erişim ve değişim mantığını ayrı getter ve setter yöntemlerine gerek kalmadan kapsülleyebilirsiniz. -
Basitleştirilmiş Syntax (Söz Dizimi)
Artık property hooks'u doğrudan constructor parametrelerinde tanımlayabiliyorsunuz, bu da class tanımlarını daha iyi hale getiren bir unsur.
Kullanım Örneği
İşte Property Hooks'un nasıl çalıştığını gösteren bir örnek:
class Address
{
public function __construct(
private string $city {
get {
return ucfirst($this->city);
}
set {
if (empty($value)) {
throw new InvalidArgumentException("Şehir boş olamaz.");
}
$this->city = trim($value);
}
},
private string $country
) {}
public string $fullAddress {
get => "{$this->city}, {$this->country}";
set {
[$this->city, $this->country] = explode(', ', $value);
}
}
}
Asimetrik Görünürlük (Asymmetric Visibility)
Asimetrik Görünürlük, PHP 8.4 ile gelen bir diğer özellik. Bu özellik, bir özelliğin getter ve setter'ı için farklı erişim seviyeleri tanımlamanıza olanak tanıyor.
Nasıl Çalışır?
Asimetrik görünürlük, constructor içinde:
public function __construct(public private(set) string $name) {}
Veya doğrudan sınıf içinde tanımlanabilir:
public private(set) string $name;
Pratik Örnek
class User
{
public private(set) string $username;
public function __construct(string $username)
{
$this->username = $username;
}
public function changeUsername(string $newUsername): void
{
$this->username = $newUsername;
}
}
Array'ler (Diziler) İçin Yeni Arama Fonksiyonları
PHP 8.4, dizilerle çalışmayı kolaylaştıran dört yeni fonksiyon sunuyor:
-
array_find
Bir koşulu sağlayan ilk öğeyi bulur.$numbers = [1, 2, 3, 4, 5]; $evenNumber = array_find($numbers, fn($n) => $n % 2 === 0); echo $evenNumber;
-
array_find_key
Bir koşulu sağlayan ilk öğenin anahtarını bulur.$fruits = ['a' => 'elma', 'b' => 'muz', 'c' => 'kiraz']; $key = array_find_key($fruits, fn($fruit) => $fruit === 'muz'); echo $key;
-
array_any
Dizideki herhangi bir öğenin bir koşulu sağlayıp sağlamadığını kontrol eder. -
array_all
Dizideki tüm öğelerin bir koşulu sağlayıp sağlamadığını kontrol eder.
Parantezsiz Metot Çağrıları
PHP 8.4, nesne oluşturma ve ardından metot çağırma sırasında parantezleri gereksiz hale getirir. Şimdi:
new Foo($bar)->baz();
Yeni mb_ucfirst
ve mb_lcfirst
Fonksiyonları
PHP 8.4, çok baytlı karakter dizileri için mb_ucfirst
ve mb_lcfirst
fonksiyonlarını sunuyor.
#[\Deprecated] Attribute (Özniteliği)
PHP 8.4, fonksiyonları, sabitler ve enum durumlarını eski olarak işaretlemek için #[\Deprecated]
belirtecini desteklemeye başlıyor.
Örnek:
#[\Deprecated(reason: "v2 itibariyle yeniFonksiyon işlevine taşındı.")]
function eskiFonksiyon() {
// Eski kod
}
Sonuç
PHP 8.4, geliştirme verimliliğini ve kod kalitesini artıran yeni özellikler sunuyor. Array fonksiyonları, #[\Deprecated]
attribute gibi eklemelerle modern web geliştirme için güçlü bir araç olmaya devam ediyor.
“Yazmak, geleceği görmektir.” Paul Valéry