WeakMap sınıfı

(PHP 8)

Giriş

WeakMap nesneleri anahtar olarak kabul eden bir haritadır (veya sözlüktür). Ancak, SplObjectStorage'dan farklı olarak, WeakMap anahtarındaki nesne, nesnenin gönderim sayısına katkıda bulunmaz. Yani, herhangi bir noktada bir nesneye kalan tek gönderim bir WeakMap anahtarı ise, nesne çöp olarak toplanacak ve WeakMap'ten kaldırılacaktır. Birincil kullanım durumu, nesneden daha uzun yaşaması gerekmeyen bir nesneden türetilen verilerin arabelleklerini oluşturmak içindir.

WeakMap sınıfı ArrayAccess, Iterator ve Countable arayüzlerini gerçekler, bu yüzden çoğu durumda ilişkili bir dizi gibi kullanılabilir.

Sınıf Sözdizimi

final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* Yöntemler */
public count(): int
public offsetExists(object $nesne): bool
public offsetGet(object $nesne): mixed
public offsetSet(object $nesne, mixed $değer): void
public offsetUnset(object $girdi): void
}

Örnekler

Örnek 1 - Weakmap kullanım örneği

<?php
$wm
= new WeakMap();

$o = new stdClass;

class
A {
public function
__destruct() {
echo
"Öldü!\n";
}
}

$wm[$o] = new A;

var_dump(count($wm));
echo
"Yok ediliyor...\n";
unset(
$o);
echo
"İşi bitti\n";
var_dump(count($wm));

Yukarıdaki örneğin çıktısı:

int(1)
Yok ediliyor...
Öldü!
İşi bitti
int(0)

İçindekiler

add a note

User Contributed Notes 1 note

up
-1
malferov at gmail dot com
1 month ago
<?php

$wp
= new WeakMap();

// It's not working.
// Has no error but not adding dynamically specifying object to map;
// garbage collector will not be able to clear unnamed value, as I suppose
$wp[new stdClass()] = 'value';
echo
$wp->count() . PHP_EOL; // 0

// It's working, as expected
$obj = new stdClass();
$wp[$obj] = 'value';
echo
$wp->count(); // 1
To Top