raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP 8'de Nesne Yönetimi Sanatı: Weak Map'ler

Karadayı ✓

Karadayı ✓
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Uzman
Ayın Üyesi
Katılım
21 May 2024
Konular
1,450
Mesajlar
2,451
Çözüm
7
Online süresi
3mo 25d
Reaksiyon Skoru
2,564
Altın Konu
1,027
Başarım Puanı
274
Yaş
51
MmoLira
36,853
DevLira
110
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Gemini_Generated_Image_kscay1kscay1ksca.png

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:

[CODE title="php"]$weakMap = new WeakMap();[/CODE]

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.

[CODE title="php"]$nesne = new stdClass();
$weakMap->set($nesne, "Bu nesneyle ilişkili veri");[/CODE]

Bu nesneye bağlı veriyi geri almak için ise get metodunu kullanırız:

[CODE title="php"]$veri = $weakMap->get($nesne);
// $veri değişkeninin değeri şimdi "Bu nesneyle ilişkili veri" oldu.[/CODE]

Kontrol ve Silme İşlemleri

Bir nesnenin Weak Map içinde var olup olmadığını kontrol etmek için has metodunu kullanabilirsiniz:

[CODE title="php"]if ($weakMap->has($nesne)) {
echo "Nesne, Weak Map içinde bulundu.";
} else {
echo "Nesne, Weak Map içinde bulunamadı.";
}[/CODE]

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.
 
Paylaşım için teşekkürler :)
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst