แนะนำตัว
ด้วยการอ้างอิงที่อ่อนแอ เป็นไปได้ที่จะคงการอ้างอิงไปยังวัตถุซึ่งไม่ได้ป้องกันวัตถุจากการถูกทำลาย การใช้แคชเช่นโครงสร้างสามารถทำได้โดยการอ้างอิงที่อ่อนแอ
การอ้างอิงที่อ่อนแอจะคล้ายกับการอ้างอิงปกติ ยกเว้นว่าไม่ได้ป้องกันตัวรวบรวมขยะจากการรวบรวมอ็อบเจ็กต์ หากไม่พบการอ้างอิงที่ชัดเจนถึงวัตถุนั้น จะถูกลบออกจากหน่วยความจำทันที วิธีนี้ทำให้สามารถใช้ประโยชน์ส่วนใหญ่ของแคชได้ โดยไม่มีปัญหาเรื่องหน่วยความจำ
จุดอ่อน คลาสได้รับการแนะนำใน 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