Laravel ใช้คุณสมบัติของ PHP เรียกว่า “Magic Methods” ในการจัดการกับการเข้าถึง properties หรือ methods ที่ไม่มีอยู่จริงใน class. สอง magic methods หลักที่เกี่ยวข้องในสถานการณ์นี้คือ __get() และ __set(). วิธีการทำงานนี้ช่วยให้ Laravel สามารถเสนอคุณสมบัติอัตโนมัติ เช่น dynamic properties หรือ late static binding ได้.
เมื่อคุณพยายามเข้าถึง property ของ object ใน Laravel ที่ไม่ได้ถูกกำหนดไว้ภายใน class ดังกล่าว, Laravel จะทำการเรียกใช้ method __get() โดยอัตโนมัติ. นี่คือวิธีที่ PHP อนุญาตให้ทำการ intercept การเข้าถึง property ที่ไม่มีอยู่. Laravel ใช้ประโยชน์จากคุณสมบัตินี้เพื่อตรวจสอบว่ามีการเข้าถึง attribute หรือความสัมพันธ์ที่โหลดผ่าน Eloquent ORM หรือไม่, หรือการเข้าถึงค่าที่ถูกเก็บไว้ใน array หรือ collection ที่เกี่ยวข้อง.
หาก property ที่เรียกไม่มีอยู่จริง, Laravel มักจะคืนค่า null เนื่องจากมีการตรวจสอบภายใน method __get() ว่ามีการกำหนดค่าหรือการเข้าถึงความสัมพันธ์ที่มีการกำหนดไว้หรือไม่. ถ้าไม่พบ, Laravel จึงคืนค่า null กลับมาเป็นการแสดงว่าไม่มี property นั้นๆ.
นอกจากนี้, Laravel ยังใช้คุณสมบัติอื่นๆ เช่น Accessors และ Mutators ใน Eloquent ORM, ซึ่งเป็นวิธีการกำหนด custom logic ในการอ่านหรือเขียนค่าของ attributes ของ model. Accessor ช่วยให้คุณสามารถจัดการกับการเข้าถึงค่าของ attribute ที่เรียก, และให้ความสามารถในการคืนค่าที่แตกต่างออกไปจากค่าที่เก็บอยู่ในฐานข้อมูลหรือค่าเริ่มต้น.
เพื่อรับมือกับการเข้าถึง property ที่ไม่มีอยู่และต้องการคืนค่าที่ไม่ใช่ null, คุณสามารถใช้ Accessors ใน Eloquent model ของคุณเพื่อกำหนดค่าที่จะถูกคืนกลับเมื่อมีการเข้าถึง property นั้น.