มันถูกกล่าวถึงในหน้าunset คู่มือในปี 2009 :
unset()
ทำในสิ่งที่ชื่อพูด - ตั้งค่าตัวแปร มันไม่ได้บังคับให้หน่วยความจำทันทีพ้น ตัวเก็บรวบรวมขยะของ PHP จะทำเมื่อเห็นว่าเหมาะสม - โดยเจตนาโดยเร็วเนื่องจากไม่จำเป็นต้องใช้รอบ CPU เหล่านั้นหรือก่อนที่สคริปต์จะหมดหน่วยความจำสิ่งใดก็ตามที่เกิดขึ้นก่อน
หากคุณกำลังทำเช่น$whatever = null;
นั้นคุณกำลังเขียนข้อมูลของตัวแปรอีกครั้ง คุณอาจได้รับหน่วยความจำอิสระ / หดเร็วขึ้น แต่มันอาจขโมยรอบ CPU จากรหัสที่ต้องการได้เร็วขึ้นส่งผลให้เวลาในการดำเนินการโดยรวมนานขึ้น
(ตั้งแต่ปี 2013 unset
หน้า man นั้นไม่รวมส่วนนั้นอีกต่อไป)
โปรดทราบว่าจนกว่า php5.3 หากคุณมีวัตถุสองรายการในการอ้างอิงแบบวงกลมเช่นในความสัมพันธ์พ่อแม่และลูกการเรียก unset () บนวัตถุแม่จะไม่เพิ่มหน่วยความจำที่ใช้สำหรับการอ้างอิงผู้ปกครองในวัตถุลูก (หน่วยความจำจะไม่ถูกปล่อยให้เป็นอิสระเมื่อวัตถุแม่ถูกเก็บขยะ) ( ข้อผิดพลาด 33595 )
คำถาม " ความแตกต่างระหว่าง unset และ = null " ให้รายละเอียดความแตกต่าง:
unset($a)
ลบออก$a
จากตารางสัญลักษณ์ ตัวอย่างเช่น:
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
ขาออก:
Notice: Undefined variable: a in xxx
NULL
แต่เมื่อ$a = null
ใช้แล้ว:
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:
NULL
ดูเหมือนว่า$a = null
จะเร็วกว่ารุ่นunset()
อื่นเล็กน้อย: การอัพเดตรายการตารางสัญลักษณ์ดูเหมือนจะเร็วกว่าการลบออก
- เมื่อคุณพยายามใช้
unset
ตัวแปรที่ไม่มีอยู่ ( ) จะเกิดข้อผิดพลาดและค่าสำหรับนิพจน์ตัวแปรจะเป็นโมฆะ (เพราะ PHP ควรทำอะไรอย่างอื่นการแสดงออกทุกอย่างต้องส่งผลให้เกิดค่า)
- ตัวแปรที่มีค่า null ถูกกำหนดให้มันยังคงเป็นตัวแปรปกติอย่างสมบูรณ์แบบ
$whatever
ชี้ไปที่วัตถุเขียนทับตัวชี้ไม่ใช่วัตถุเองจึงทำหน้าที่เป็นเช่นเดียวกับ$whatever = null
unset()