Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

Magic Methods ใน PHP

บทนำ

Magic Methods ใน PHP คือเมธอดพิเศษที่ถูกออกแบบมาเพื่อทำหน้าที่เฉพาะเจาะจง ชื่อเมธอดเหล่านี้จะขึ้นต้นด้วย Double Underscore (__) ชื่อฟังก์ชันทั้งหมดนี้เป็นคำสงวน (Reserved) ไม่สามารถนำไปใช้เพื่อวัตถุประสงค์อื่นได้ Magic Method ในคลาสต้องประกาศเป็น public เมธอดเหล่านี้ทำหน้าที่เป็น Interceptor ที่ถูกเรียกใช้โดยอัตโนมัติเมื่อเงื่อนไขบางอย่างถูกปฏิบัติตาม

รายการ Magic Methods ใน PHP

__sleep และ __wakeup (Serialization)

public __sleep ( void ) : array
public __wakeup ( void ) : void
  • __sleep() - เรียกก่อน serialize() ควรคืนค่า Array ของชื่อตัวแปรที่ต้องการ serialize
  • __wakeup() - เรียกเมื่อ unserialize() ใช้สำหรับสร้างทรัพยากรที่ออบเจ็กต์อาจมีอยู่

__serialize และ __unserialize (Custom Serialization - PHP 7.4+)

public __serialize ( void ) : array
public __unserialize ( array $data ) : void
  • __serialize() - คืนค่า Associative Array ที่แสดงรูปแบบ Serialized ของออบเจ็กต์
  • __unserialize() - รับ Array ที่คืนมาจาก __serialize() เพื่อกู้คืนพร็อพเพอร์ตี

__toString

public __toString ( void ) : string

กำหนดการแสดงผลสตริงของออบเจ็กต์ เช่นเมื่อทำ echo $obj; ต้องคืนค่าสตริง

__invoke

__invoke ([ $... ] ) : mixed

เรียกเมื่อพยายามเรียกใช้ออบเจ็กต์เหมือนฟังก์ชัน

__set_state

static __set_state ( array $properties ) : object

Static method ที่เรียกเมื่อคลาสถูก Export ด้วย var_export() รับ Parameter เป็น Array ของพร็อพเพอร์ตี

__debugInfo

__debugInfo ( void ) : array

เรียกโดยอัตโนมัติเมื่อใช้ var_dump() กับออบเจ็กต์ เพื่อกำหนดพร็อพเพอร์ตีที่ควรแสดง ถ้าไม่กำหนด จะแสดงทุกพร็อพเพอร์ตี (public, protected, private)

Property Overloading Methods

public __set ( string $name , mixed $value ) : void
public __get ( string $name ) : mixed
public __isset ( string $name ) : bool
public __unset ( string $name ) : void
  • __set() - เรียกเมื่อเขียนข้อมูลลงพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
  • __get() - เรียกเมื่ออ่านข้อมูลจากพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
  • __isset() - เรียกเมื่อใช้ isset() หรือ empty() กับพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
  • __unset() - เรียกเมื่อใช้ unset() กับพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่

Method Overloading Methods

public __call ( string $name , array $arguments ) : mixed
public static __callStatic ( string $name , array $arguments ) : mixed
  • __call() - เรียกเมื่อเรียกเมธอดที่เข้าถึงไม่ได้ใน Object Context
  • __callStatic() - เรียกเมื่อเรียกเมธอดที่เข้าถึงไม่ได้ใน Static Context

ข้อควรจำ

  • Magic Methods ต้องเป็น public เสมอ
  • ชื่อเมธอดเป็น Reserved Words ห้ามนำไปใช้อื่น
  • ทำงานแบบ Interceptor - เรียกอัตโนมัติเมื่อเงื่อนไขตรงตามที่กำหนด