วิธีมายากลใน PHP คืออะไร? และวิธีการใช้งาน?



บทความนี้จะให้ความรู้โดยละเอียดและครอบคลุมเกี่ยวกับ Magic Methods ต่างๆใน PHP พร้อมตัวอย่าง

ใน ฟังก์ชันพิเศษสามารถกำหนดในลักษณะที่สามารถเรียกได้โดยอัตโนมัติและไม่ต้องมีการเรียกใช้ฟังก์ชันใด ๆ เพื่อดำเนินการโค้ดภายในฟังก์ชันเหล่านี้ คุณลักษณะนี้มีอยู่ในวิธีพิเศษที่เรียกว่าวิธีการมายากล ในบทความนี้เราจะพูดถึง Magic Methods อันดับต้น ๆ ใน PHP

Magic Methods ใน PHP คืออะไร?

เมธอดที่ขึ้นต้นด้วยขีดล่าง 2 อัน (__) โดยทั่วไปเรียกว่าเมธอด Magic ใน PHP ชื่อวิธีการเหล่านี้ จำกัด เฉพาะบางรายการ PHP คำหลักที่รองรับที่สงวนไว้ ดังนั้นจึงไม่ควรกำหนดฟังก์ชันด้วยชื่อ PHP magic method





การสร้างอาร์เรย์วัตถุใน java

Magic-Methods-in-PHP

โดยปกติผู้ใช้ควรกำหนดฟังก์ชันเหล่านี้และไม่จำเป็นต้องเรียกใช้อย่างชัดเจน



รายชื่อวิธีการมายากลใน PHP

  • __สร้าง()
  • __ ทำลาย ()
  • __call ($ สนุก $ arg)
  • __callStatic ($ สนุก $ arg)
  • __get (คุณสมบัติ $)
  • __set (คุณสมบัติ $ ค่า $)
  • __isset (เนื้อหา $)
  • __unset (เนื้อหา $)
  • __นอน()
  • __ตื่นนอน()
  • __toString ()
  • __invoke ()
  • __set_state ($ array)
  • __ โคลน ()
  • __debugInfo ()
  • __สร้าง(): เป็นวิธีการที่เรียกโดยอัตโนมัติหลังจากการสร้างวัตถุ สามารถกำหนดอาร์กิวเมนต์จำนวนเท่าใดก็ได้ที่นี่ซึ่งจะถูกส่งผ่านเมื่อวัตถุถูกสร้างขึ้น
ตัวอย่างคลาส {function user_def () {echo 'user defined constructor'} function __construct () {echo 'predefined constructor'}} $ obj = new sample ()?>

  • __destruct (): Destructor เป็นคุณสมบัติทั่วไปของภาษาเชิงวัตถุที่ถูกทริกเกอร์ทันทีที่ไม่มีการอ้างอิงอื่น ๆ ไปยังออบเจ็กต์หนึ่ง ๆ
user_def () // ตรวจสอบวัตถุถูกทำลายหรือไม่ echo is_object ($ obj) ' '?>

  • __call ($ fun, $ arg): วิธีนี้เรียกว่าเมื่อมีการเรียกวิธีการที่ไม่ได้กำหนดหรือไม่สามารถเข้าถึงได้ ซึ่งหมายความว่าจะถูกเรียกเมื่อมีการเรียกใช้วิธีการที่ไม่ได้กำหนดหรือไม่สามารถเข้าถึงได้บนวัตถุ
run ('teacher') // หากมีการเรียกใช้ method ที่ไม่มีอยู่ภายใน object เมธอด __call () จะถูกเรียกโดยอัตโนมัติ $ obj-> กิน ('ashok', 'orange') $ obj-> user_define ()?>



  • __callStatic ($ fun, $ arg): วิธีนี้เรียกว่าเมื่อมีการเรียกใช้วิธีการที่ไม่ได้กำหนดหรือไม่สามารถเข้าถึงได้ในลักษณะคงที่
user_define ()?>

  • __get (คุณสมบัติ $): วิธีนี้ใช้สำหรับการรับค่าสำหรับคุณสมบัติคลาสที่สร้างขึ้นแบบไดนามิกโดยการโอเวอร์โหลดคุณสมบัติ PHP
name = $ name $ this-> reg = $ reg} public function __get ($ propertyName) {if ($ propertyName == 'reg') {if ($ this-> reg> 30) {return $ this-> reg - 10} else {return $ this -> $ propertyName}} else {return $ this -> $ propertyName}}} $ obj = new Student ('Ashok', 60) // สร้างอินสแตนซ์วัตถุด้วยคลาสนักเรียนและกำหนดค่าเริ่มต้น ไปยังคุณสมบัติด้วยตัวสร้าง echo 'ชื่อ:' $ obj-> ชื่อ. '' // เมื่อเข้าถึงคุณสมบัติส่วนตัวเมธอด __get () จะถูกเรียกโดยอัตโนมัติดังนั้นเราจึงสามารถรับค่าคุณสมบัติทางอ้อมได้ echo 'reg:' $ obj-> reg. '' // เมธอด __get () ถูกเรียกโดยอัตโนมัติ, และจะส่งคืนค่าที่แตกต่างกันตามวัตถุ ?>

  • __set (คุณสมบัติ $, $ value): วิธีนี้ใช้สำหรับการใส่ค่าสำหรับคุณสมบัติคลาสที่สร้างขึ้นแบบไดนามิกโดยการโอเวอร์โหลดคุณสมบัติ PHP
name = $ name $ this-> reg = $ reg} public function __set ($ property, $ value) {if ($ property == 'reg') $ value $ property = $ value public function fun () {echo 'My ชื่อคือ '. $ this-> name.' เลขทะเบียนของฉันคือ '. $ this-> reg}} $ obj = new Student (' Ashok ', 40) // โปรดทราบว่ารหัสจะเปลี่ยนค่าเริ่มต้น ด้านล่าง $ obj-> name = 'Sushma' // คุณสมบัติ 'name' จะถูกกำหนดสำเร็จ หากไม่มีเมธอด __set () โปรแกรมจะแสดงข้อยกเว้น $ obj-> age = 16 // คุณสมบัติ 'reg' จะถูกกำหนดสำเร็จ $ obj-> reg = 160 // 160 เป็นค่าที่ไม่ถูกต้องดังนั้นจึงไม่สามารถกำหนดได้ $ obj-> สนุก ()?>

  • __isset (เนื้อหา $); วิธีนี้จะถูกเรียกในขณะที่เรียก isset () หรือ empty () สำหรับสมาชิกที่ไม่ได้กำหนดหรือไม่สามารถเข้าถึงได้ เรียกใช้โดยอัตโนมัติในขณะที่ตรวจสอบว่ามีการตั้งค่าคุณสมบัติโอเวอร์โหลดที่จำเป็นหรือไม่โดยใช้ฟังก์ชัน PHP isset ()
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __isset ($ content) {echo 'คุณสมบัติ {$ content} เป็นแบบส่วนตัว, วิธี __isset () จะถูกเรียกโดยอัตโนมัติ 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // กำหนดในเบื้องต้น echo isset ($ obj-> gender), '' echo isset ($ obj-> name), '' echo isset ($ obj-> reg), ''?>

  • __unset (เนื้อหา $): วิธีนี้จะถูกเรียกในขณะที่เรียกการรีเซ็ต () สำหรับสมาชิกที่ไม่ได้กำหนดหรือไม่สามารถเข้าถึงได้
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __unset ($ content) {echo 'จะถูกเรียกโดยอัตโนมัติเมื่อเราใช้ unset () วิธีการนอกคลาส 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // กำหนดในเบื้องต้น unset ($ obj-> gender) unset ($ obj-> name) unset ($ obj-> reg)?>

  • __นอน(): วิธีนี้เรียกว่าก่อนในขณะที่เรียกใช้ serialize () ส่งคืนอาร์เรย์คุณสมบัติของวัตถุในการทำความสะอาดออบเจ็กต์คลาส PHP ก่อนการทำให้เป็นอนุกรม
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __sleep () {echo 'จะถูกเรียกเมื่อมีการเรียกวิธี serialize () นอกคลาส '$ this-> name = base64_encode ($ this-> name) ส่งคืนอาร์เรย์ (' name ',' reg ') // ต้องส่งคืนค่าที่องค์ประกอบเป็นชื่อของคุณสมบัติที่ส่งคืน }} $ obj = นักเรียนใหม่ ('Ashok') // มอบหมายในเบื้องต้น echo serialize ($ obj) echo ''?>

  • __ตื่นนอน(): วิธีนี้เรียกว่าในขณะที่ดำเนินการ deserialization () มันจะทำงานย้อนกลับเพื่อกู้คืนคุณสมบัติของวัตถุและทรัพยากรในการเรียกใช้ deserialization ()
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __sleep () {echo 'จะถูกเรียกเมื่อมีการเรียกวิธี serialize () นอกคลาส '$ this-> name = base64_encode ($ this-> name) ส่งคืนอาร์เรย์ (' name ',' reg ') // ต้องส่งคืนค่าที่องค์ประกอบเป็นชื่อของคุณสมบัติที่ส่งคืน } ฟังก์ชันสาธารณะ __wakeup () {echo 'จะถูกเรียกเมื่อเมธอด unserialize () ถูกเรียกนอกคลาส '$ this-> name = 2 $ this-> gender =' Male '}} $ obj = new Student (' Ashok ') // กำหนดในเบื้องต้น var_dump (ซีเรียลไลซ์ ($ obj)) var_dump (ไม่ต่อซีเรียล (ซีเรียลไลซ์ ($ obj)))?>

  • __toString (): วิธีนี้จะถูกเรียกใช้ในขณะที่ใช้เมธอด echo เพื่อพิมพ์วัตถุโดยตรง คาดว่าจะส่งคืนค่าสตริงในขณะที่ใช้อินสแตนซ์คลาสด้วยคำสั่งการพิมพ์ PHP
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __toString () {return 'go go go'}} $ obj = new Student ('Ashok') // กำหนดในขั้นต้น echo $ obj?>

  • __invoke (): วิธีนี้กำหนดไว้ในคลาสที่จะถูกเรียกในขณะที่พยายามเรียกวัตถุด้วยวิธีการเรียกใช้ฟังก์ชัน
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __invoke () {echo 'This is an object'}} $ obj = new Student ('Ashok') // กำหนดในเบื้องต้น . $ obj ()?>

  • __set_state ($ array): วิธีนี้เรียกขณะเรียก var_export () เป็นวิธีการแบบคงที่ที่เรียกในขณะที่ส่งออกอาร์เรย์คุณสมบัติของวัตถุและคาดว่าตัวแปรอาร์เรย์ดังกล่าวเป็นอาร์กิวเมนต์
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender}} $ obj = new Student ('Ashok') // กำหนดในเบื้องต้น var_export ($ obj)?>

  • __ โคลน (): วิธีนี้เรียกว่าเมื่อวัตถุถูกคัดลอก
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __clone () {echo __METHOD __. 'คุณกำลังโคลนวัตถุ '}} $ obj = นักศึกษาใหม่ (' Ashok ') // มอบหมายในเบื้องต้น $ obj2 = โคลน $ obj var_dump ('object1:') var_dump ($ obj) echo '' var_dump ('object2:') var_dump ($ obj2)?>

  • __debugInfo (): เมธอดนี้เรียกโดย var_dump () ในขณะที่ทิ้งวัตถุเพื่อรับคุณสมบัติที่ควรจะแสดง หากไม่ได้กำหนดเมธอดบนอ็อบเจ็กต์คุณสมบัติสาธารณะที่มีการป้องกันและไพรเวตทั้งหมดจะแสดงขึ้น
prop = $ val} ฟังก์ชันสาธารณะ __debugInfo () {return ['propSquared' => $ this-> prop ** 2,]}} var_dump (ตัวอย่างใหม่ (22))?>

คุณสามารถเพิ่ม double เป็น int

ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของวิธีการวิเศษนี้ในบทความ PHP ฉันหวังว่าคุณจะได้ทราบถึงวิธีการวิเศษต่างๆใน PHP

ตรวจสอบไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของ ' วิธีมายากลใน PHP ” แล้วฉันจะติดต่อกลับไป