Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

Weak Maps ใน PHP คืออะไร?


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