Çok eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
PHP 8'de Nesne Yönetimi Sanatı: Weak Map'ler
PHP 8, nesne yönelimli programlama dünyasına oldukça değerli bir yenilik getirdi: Weak Map'ler. Peki, bu yapı nedir ve neden bu kadar önemli? Weak Map'ler, bir nesneye veri bağlamanıza olanak tanır, ancak bunu yaparken o nesnenin bellekten silinmesini (garbage collection) engellemez. Gelin, bu güçlü aracın ne olduğuna ve PHP kodlarımızı nasıl daha verimli hale getirebileceğine yakından bakalım.
Weak Map'leri Anlamak: Bellek Sızıntılarına Son
Geleneksel ilişkisel dizilerde (array), bir nesneyi anahtar (key) olarak kullandığımızda, o nesneye "güçlü bir referans" oluşturmuş oluruz. Bu durum, kodun başka hiçbir yerinde kullanılmasa bile o nesnenin bellekte yer kaplamaya devam etmesine neden olur ve bu da istenmeyen bellek sızıntılarına yol açabilir.
İşte Weak Map'ler tam da bu sorunu çözmek için devreye giriyor. Bir nesneye veri bağlarken güçlü bir referans oluşturmazlar. Bu sayede, eğer bir nesneye olan tek referans Weak Map içerisindeyse, çöp toplayıcı (garbage collector) o nesneyi gönül rahatlığıyla bellekten temizleyebilir.
Weak Map Oluşturma
PHP 8'de bir Weak Map oluşturmak için WeakMap sınıfını kullanırız. Boş bir Weak Map şu şekilde oluşturulur:
php:
$weakMap = new WeakMap();
Nesnelere Veri Ekleme ve Okuma
Bir nesneye veri bağlamak için set metodunu kullanırız. İlk parametre nesnenin kendisi, ikincisi ise bağlamak istediğimiz veridir.
php:
$nesne = new stdClass();
$weakMap->set($nesne, "Bu nesneyle ilişkili veri");
Bu nesneye bağlı veriyi geri almak için ise get metodunu kullanırız:
php:
$veri = $weakMap->get($nesne);
// $veri değişkeninin değeri şimdi "Bu nesneyle ilişkili veri" oldu.
Kontrol ve Silme İşlemleri
Bir nesnenin Weak Map içinde var olup olmadığını kontrol etmek için has metodunu kullanabilirsiniz:
php:
if ($weakMap->has($nesne)) {
echo "Nesne, Weak Map içinde bulundu.";
} else {
echo "Nesne, Weak Map içinde bulunamadı.";
}
Eğer bir nesneyi ve ona bağlı veriyi Weak Map'ten kaldırmak isterseniz, unset fonksiyonunu kullanmanız yeterlidir:
Kod:
unset($weakMap[$nesne]);
// Bu işlemden sonra nesne, artık Weak Map ile ilişkili değildir.
Weak Map'lerin Kullanım Alanları
Weak Map'ler, özellikle geçici veya nesnenin yaşam döngüsünü etkilememesi gereken veri ilişkilendirmelerinde parlar. İşte bazı yaygın kullanım senaryoları:
Önbellekleme (Caching): Nesnelere ait hesaplanmış verileri önbelleğe alırken, nesne bellekten silindiğinde önbellekteki verinin de otomatik olarak temizlenmesini sağlar.
Olay Dinleyicileri (Event Listeners): Olay tabanlı sistemlerde, bir nesneye olay dinleyicileri bağlayabilirsiniz. Nesne yok olduğunda, ona bağlı dinleyiciler de otomatik olarak kaybolur.
Nesneye Özel Meta Veriler: Nesnelerin kendisini değiştirmeden onlara ek bilgiler veya meta veriler eklemek için mükemmel bir yoldur.
Kaynak Yönetimi: Bir nesneye bağlı veritabanı bağlantısı gibi kaynakların, nesne artık kullanılmadığında serbest bırakılmasını garantilemeye yardımcı olur.
Sonuç olarak, PHP 8 ile gelen Weak Map'ler, nesnelerle veri ilişkilendirirken bellek yönetimini çok daha verimli hale getiren güçlü bir araçtır. Özellikle büyük ve karmaşık uygulamalarda, bellek sızıntılarını önleyerek daha temiz ve performanslı kod yazmamıza olanak tanır.