ความแตกต่างระหว่าง DateTime และ DateTimeImmutable ใน PHP: เปรียบเทียบ

Web Development

ความแตกต่างระหว่าง DateTime และ DateTimeImmutable ใน PHP: เปรียบเทียบ

ประมาณ 2 เดือนที่ผ่านมา

1 min read

ใน PHP คลาส DateTime และ DateTimeImmutable ถูกใช้สำหรับการจัดการวันที่และเวลา อย่างไรก็ดี คลาสทั้งสองนี้มีจุดประสงค์การใช้งานที่ต่างกัน บทความนี้จะเปรียบเทียบความแตกต่างระหว่าง DateTime และ DateTimeImmutable เพื่อช่วยให้นักพัฒนาเลือกใช้คลาสที่เหมาะสมกับงาน

ความสามารถในการแก้ไข

  • DateTime: คลาสนี้สามารถแก้ไขได้ หมายความว่าสามารถเปลี่ยนแปลงค่าวันที่และเวลาของออบเจ็กต์หลังจากสร้างแล้ว
  • DateTimeImmutable: คลาสนี้ไม่สามารถแก้ไขได้ หมายความว่าค่าวันที่และเวลาของออบเจ็กต์จะคงเดิมหลังจากสร้างแล้ว

ประสิทธิภาพ

  • DateTime: การแก้ไขออบเจ็กต์ DateTime นั้นมีประสิทธิภาพน้อยกว่า เนื่องจากต้องสร้างออบเจ็กต์ใหม่
  • DateTimeImmutable: การสร้างออบเจ็กต์ DateTimeImmutable นั้นมีประสิทธิภาพมากกว่า เนื่องจากไม่จำเป็นต้องสร้างออบเจ็กต์ใหม่

ความปลอดภัย

  • DateTime: การแก้ไขออบเจ็กต์ DateTime โดยไม่ได้ตั้งใจอาจสร้างบั๊กในโปรแกรม
  • DateTimeImmutable: การใช้ DateTimeImmutable ช่วยให้มั่นใจได้ว่าค่าวันที่และเวลาจะไม่เปลี่ยนแปลงโดยไม่ได้ตั้งใจ

การใช้งาน

  • DateTime: เหมาะสำหรับการใช้งานที่ต้องการแก้ไขค่าวันที่และเวลา เช่น การติดตามเวลาการทำงาน
  • DateTimeImmutable: เหมาะสำหรับการใช้งานที่ต้องการเก็บค่าวันที่และเวลาไว้โดยไม่ต้องแก้ไข เช่น การบันทึกข้อมูลลงฐานข้อมูล

ตัวอย่าง Code: เปรียบเทียบ DateTime vs DateTimeImmutable

// ตัวอย่างการสร้างออ object
 
$date = new DateTime(); // สร้างออ object DateTime
$immutableDate = new DateTimeImmutable(); // สร้างออ object DateTimeImmutable
 
// ตัวอย่างการแก้ไข
 
$date->modify('+1 day'); // เพิ่ม 1 วัน to $date
// $immutableDate->modify('+1 day'); // เกิดข้อผิดพลาด 'Cannot modify an immutable DateTimeImmutable object'
 
// ตัวอย่างการเปรียบเทียบ
 
echo $date->format('Y-m-d') . PHP_EOL; // แสดงวันที่ปัจจุบัน
echo $immutableDate->format('Y-m-d') . PHP_EOL; // แสดงวันที่ปัจจุบัน
 
// ตัวอย่างการใช้งาน
 
$startDate = new DateTimeImmutable('2023-12-01'); // เก็บวันที่เริ่มต้น
$endDate = new DateTimeImmutable('2024-03-08'); // เก็บวันที่สิ้นสุด
 
// คำนวณจำนวนวัน
$interval = $endDate->diff($startDate);
echo $interval->days . ' days' . PHP_EOL; // แสดงจำนวนวัน
 

สรุป

โดยทั่วไปแล้ว แนะนำให้ใช้ DateTimeImmutable แทน DateTime ยกเว้นกรณีที่จำเป็นต้องแก้ไขค่าวันที่และเวลา การใช้ DateTimeImmutable ช่วยให้โปรแกรมมีประสิทธิภาพ ปลอดภัย และอ่านง่ายขึ้น

Reference

Tags:

PHP