อินเทอร์เฟสใน OOP ใน PHP
อย่างที่คุณทราบแล้ว คลาสนามธรรมคือชุดของเมธอดสำหรับคลาสลูก เมธอดบางส่วนสามารถถูกนำไปใช้ในคลาสนั้นเองได้ และเมธอดบางส่วนสามารถประกาศเป็นนามธรรมและกำหนดให้ต้องมีการนำไปใช้ในคลาสลูก
ลองจินตนาการถึงสถานการณ์ที่คลาสนามธรรมของคุณมีเฉพาะชุดของเมธอดนามธรรมสาธารณะ โดยไม่เพิ่มเมธอดที่มีการนำไปใช้
ในทางปฏิบัติ คลาสแม่ของคุณกำลังอธิบาย อินเทอร์เฟส ของคลาสลูก นั่นคือชุด ของเมธอดสาธารณะของพวกเขา ที่จำเป็นต้องมีการนำไปใช้
ทำไมเราถึงต้องการสิ่งนี้: เพื่อให้เมื่อเขียนโปรแกรม เราทำผิดพลาดน้อยลง - โดยการอธิบายเมธอดที่จำเป็นทั้งหมด ในคลาสแม่ เราสามารถมั่นใจได้ว่าคลาสลูกทั้งหมดจะนำเมธอดเหล่านั้นไปใช้จริงๆ
เมื่อใดที่สิ่งนี้จะช่วยได้: สมมติว่าเราสร้าง คลาสแม่และคลาสลูกหลายคลาสจากมัน หากหลังจากนั้นผ่านไประยะหนึ่ง เช่น ผ่านไปหนึ่งเดือน เราตัดสินใจสร้างคลาสลูกอีกคลาส เราอาจจะลืมรายละเอียด ของโค้ดของเราและอาจลืมเขียน การนำเมธอดบางเมธอดไปใช้ในคลาสลูกใหม่ อย่างไรก็ตาม PHP เองจะไม่อนุญาตให้เมธอดหายไป - และจะแค่แสดงข้อผิดพลาด
เช่นเดียวกันกับโปรแกรมเมอร์คนอื่น ที่ทำงานกับโปรเจกต์ของคุณ สมมติว่าโค้ดของคลาสแม่ เขียนโดยคุณ จากนั้นเพื่อนร่วมงานของคุณตัดสินใจสร้าง คลาสลูกอีกคลาส เพื่อนร่วมงานของคุณก็จะ ไม่สามารถทำให้เมธอดหายไปสองสามเมธอดได้เช่นกัน
อย่างไรก็ตาม มีปัญหาอยู่: ในทางปฏิบัติเราสร้าง คลาสแม่ของเราขึ้นเพื่อเขียน เมธอดนามธรรมสาธารณะในนั้น แต่เรา เองหรือเพื่อนร่วมงานของเรามีโอกาสเพิ่ม เมธอดที่ไม่ใช่สาธารณะ หรือไม่ใช่นามธรรมเข้าไปในคลาสนี้โดยไม่ได้ตั้งใจ
สมมติว่าเราต้องการห้ามทางกายภาพ ไม่ให้ทำเมธอดอื่นในคลาสแม่ นอกเหนือจากเมธอดนามธรรม สาธารณะ ใน PHP เพื่อการนี้แทนที่จะใช้คลาสนามธรรม เราสามารถใช้ อินเทอร์เฟส ได้
อินเทอร์เฟสคือคลาสที่ เมธอดทั้งหมดเป็นสาธารณะและไม่มี การนำไปใช้ โค้ดของเมธอดควรถูกนำไปใช้โดย คลาสลูกของอินเทอร์เฟส
อินเทอร์เฟสถูกประกาศเช่นเดียวกับคลาสปกติ
แต่ใช้คำสำคัญ interface
แทนคำว่า class
สำหรับการสืบทอดจากอินเทอร์เฟส จะใช้
คำศัพท์ที่ต่างออกไปเล็กน้อย: กล่าวคือ
คลาสไม่ได้สืบทอดจากอินเทอร์เฟส แต่ นำไปใช้
พวกมัน ดังนั้น แทนที่จะใช้คำว่า extends
ควรใช้คำสำคัญ
implements
ไม่สามารถสร้างอ็อบเจ็กต์ของอินเทอร์เฟสได้ เมธอดทั้งหมด
ของอินเทอร์เฟสต้องประกาศเป็น public
และต้องไม่มีการนำไปใช้ อินเทอร์เฟส
สามารถมีได้เฉพาะเมธอด ไม่ใช่คุณสมบัติ
ไม่สามารถสร้างอินเทอร์เฟสและคลาส
ที่มีชื่อเดียวกันได้ด้วย