แนะนำตัว
ด้วยการอ้างอิงที่อ่อนแอ เป็นไปได้ที่จะคงการอ้างอิงไปยังวัตถุซึ่งไม่ได้ป้องกันวัตถุจากการถูกทำลาย การใช้แคชเช่นโครงสร้างสามารถทำได้โดยการอ้างอิงที่อ่อนแอ
การอ้างอิงที่อ่อนแอจะคล้ายกับการอ้างอิงปกติ ยกเว้นว่าไม่ได้ป้องกันตัวรวบรวมขยะจากการรวบรวมอ็อบเจ็กต์ หากไม่พบการอ้างอิงที่ชัดเจนถึงวัตถุนั้น จะถูกลบออกจากหน่วยความจำทันที วิธีนี้ทำให้สามารถใช้ประโยชน์ส่วนใหญ่ของแคชได้ โดยไม่มีปัญหาเรื่องหน่วยความจำ
จุดอ่อน คลาสได้รับการแนะนำใน PHP 7.4 ก่อนหน้าเวอร์ชันนี้ weakref . เคยได้รับเอฟเฟกต์แบบเดียวกัน การขยาย. คลาส WeakReference มีโครงสร้างดังนี้
ไวยากรณ์
WeakReference { /* Methods */ public __construct ( void ) public static create ( object $referent ) : WeakReference public get ( void ) : ?object }
วิธีการ
จุดอ่อนสาธารณะ::__สร้าง ( เป็นโมฆะ ) — ไม่อนุญาตให้สร้างอินสแตนซ์ของคลาส WeakReference สามารถสร้างอินสแตนซ์ได้ด้วยวิธีการจากโรงงาน WeakReference::create()
แบบคงที่สาธารณะ WeakReference::create ( วัตถุ $referent ) :WeakReference — สร้างจุดอ่อนใหม่
จุดอ่อนสาธารณะ::get ( เป็นโมฆะ ) :?object — รับวัตถุอ้างอิงที่อ่อนแอ หากวัตถุถูกทำลายไปแล้ว ค่า NULL จะถูกส่งคืน
ตัวอย่างเครื่องกำเนิดไฟฟ้า
ตัวอย่างต่อไปนี้มีวัตถุของ myclass จุดอ่อน ไปยังวัตถุของมันแสดงหนึ่งการอ้างอิง อ็อบเจ็กต์จะถูกยกเลิกการตั้งค่า ตอนนี้ WeakReference คืนค่า NULL
ตัวอย่าง
<?php class myclass{ function Hello(){ echo "Hello"; } } $obj = new myclass(); $ref = WeakReference::create($obj); var_dump($ref->get()); unset($obj); var_dump($ref->get()); ?>
ผลลัพธ์
โปรแกรมด้านบนแสดงผลลัพธ์ต่อไปนี้
object(myclass)#1 (0) { } NULL