แผนที่อ่อนแอ ถูกเพิ่มใน PHP 7.4 สามารถใช้เพื่อลบหรือลบอ็อบเจ็กต์เมื่อแคชอ้างถึงคลาสเอนทิตีอ็อบเจ็กต์ มันอ้างอิงถึงวัตถุเหล่านั้นซึ่งไม่ได้หลีกเลี่ยงวัตถุจากขยะหน่วยความจำที่รวบรวม ใน PHP 8 แผนที่ที่อ่อนแอทำให้เราสามารถเก็บข้อมูลแบบสุ่มที่เชื่อมโยงกับวัตถุ โดยไม่ทำให้หน่วยความจำรั่วไหล
กล่าวอีกนัยหนึ่ง แผนที่อ่อนแอใน PHP 8 คือกลุ่มของอ็อบเจ็กต์ที่ คีย์อ้างอิงอย่างอ่อน . แผนที่อ่อนแอใช้คลาสเพื่อสร้างวัตถุที่สามารถใช้เป็นกุญแจ ซึ่งสามารถช่วยในการลบและทำลายแผนที่อ่อนแอหากไม่มีการอ้างอิงเพิ่มเติม ในกระบวนการระยะยาว สามารถหลีกเลี่ยงการรั่วไหลของหน่วยความจำ ซึ่งในที่สุดจะปรับปรุงประสิทธิภาพ
เราสามารถพูดได้ว่าแผนที่อ่อนแอทำงานเป็นกระบวนการรวบรวมขยะอัตโนมัติ เมื่อใดก็ตามที่ตัวแปรถูกลบ PHP จะตรวจสอบว่าตัวแปรใดยังคงอ้างอิงวัตถุนั้นอยู่หรือไม่ หากตัวแปรไม่ได้อ้างอิง PHP จะลบวัตถุนั้นอย่างปลอดภัย กระบวนการนี้เรียกว่า การเก็บขยะ .
ตัวอย่าง:Weak Maps PHP 8
<?php
class WeakExample {
public WeakMap $cache;
public function __construct() {
$this->cache = new WeakMap();
}
public function getCaching(object $obj) {
return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
}
public function computeSomethingExpensive(object $obj) {
print_r("Object called");
return rand(1, 100);
}
}
$cacheObject = new stdClass;
$obj = new WeakExample;
$obj->getCaching($cacheObject);
$obj->getCaching($cacheObject);
print_r(count($obj->cache));
unset($cacheObject); // unsetting the objects and Weak Maps frees up memory
print_r(count($obj->cache));
?> ผลลัพธ์
Object called 1 0