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

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

Weak Maps ถูกเพิ่มใน PHP 7.4 สามารถใช้เพื่อลบหรือทำลายอ็อบเจกต์เมื่อแคชอ้างอิงถึงคลาสเอนทิตี มันอ้างอิงถึงอ็อบเจกต์เหล่านั้น ซึ่งไม่ป้องกันอ็อบเจกต์จากการถูกเก็บขยะ (garbage collected) ใน PHP 8 weak maps อนุญาตให้เราจัดเก็บข้อมูลสุ่มที่เชื่อมโยงกับอ็อบเจกต์ โดยไม่รั่วไหลหน่วยความจำ

กล่าวอีกนัยหนึ่ง Weak Map ใน PHP 8 เป็นกลุ่มของอ็อบเจกต์ที่ คีย์อ้างอิงอย่างอ่อน (weakly reference) Weak Map ใช้คลาสเพื่อสร้างอ็อบเจกต์ซึ่งสามารถใช้เป็นคีย์ ซึ่งช่วยให้ลบและทำลาย Weak Map ได้หากไม่มีการอ้างอิงเพิ่มเติม ในระยะยาว กระบวนการนี้สามารถป้องกันการรั่วไหลของหน่วยความจำ ซึ่งในที่สุดจะปรับปรุงประสิทธิภาพ

เราสามารถพูดได้ว่า Weak Map ทำงานเหมือนกระบวนการเก็บขยะอัตโนมัติ (automatic garbage collection) เมื่อใดก็ตามที่ตัวแปรถูกลบ PHP จะตรวจสอบว่ามีตัวแปรใดยังคงอ้างอิงถึงอ็อบเจกต์นั้นอยู่หรือไม่ หากตัวแปรไม่ได้อ้างอิง PHP จะลบอ็อบเจกต์นั้นอย่างปลอดภัย กระบวนการนี้เรียกว่า garbage collection

ตัวอย่าง: 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); // การ unset อ็อบเจกต์และ Weak Maps จะปลดปล่อยหน่วยความจำ 
print_r(count($obj->cache)); 
?>

ผลลัพธ์

Object called
1
0