แผนที่อ่อนแอ ถูกเพิ่มใน 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