บทนำ
ด้วย Weak references สามารถเก็บอ้างอิงไปยังออบเจกต์ได้โดยไม่ป้องกันไม่ให้ออบเจกต์ถูกทำลาย สามารถนำไปสร้างโครงสร้างแบบ cache ได้
Weak reference คล้ายกับ normal reference แต่ไม่ป้องกันไม่ให้ garbage collector รวบรวมออบเจกต์ หากไม่พบ strong references ไปยังออบเจกต์นั้น มันจะถูกลบออกจากหน่วยความจำทันที วิธีนี้ทำให้สามารถนำประโยชน์ส่วนใหญ่ของ cache ไปใช้ได้โดยไม่มีปัญหาเรื่องหน่วยความจำ
คลาส WeakReference ถูกเพิ่มเข้ามาใน PHP 7.4 ก่อนเวอร์ชันนี้ ผลลัพธ์เดียวกันได้จากการใช้ส่วนขยาย weakref คลาส WeakReference มีโครงสร้างดังนี้
ไวยากรณ์
WeakReference { public __construct ( void ) public static create ( object $referent ) : WeakReference public get ( void ) : ?object }เมธอด
public WeakReference::__construct ( void ) - ห้ามสร้าง instance ของ WeakReference โดยตรง ต้องสร้างผ่าน factory method WeakReference::create()
public static WeakReference::create ( object $referent ) : WeakReference - สร้าง WeakReference ใหม่
public WeakReference::get ( void ) : ?object - ดึงออบเจกต์ที่อ้างอิงแบบอ่อน หากออบเจกต์ถูกทำลายแล้ว จะคืนค่า NULL
ตัวอย่าง Generator
ตัวอย่างต่อไปนี้มี object ของ myclass WeakReference ไปยัง object นั้นแสดงอ้างอิง 1 ตัว จากนั้น unset object ตอนนี้ 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