ในกระบวนการของ OOP นั้นมันยอมให้คลาสลูกที่สืบทอดไปจากคลาสแม่ เขียนทับฟังก์ชั่นของตัวแม่ได้ เหตุผลหนึ่งที่ยอมให้กระทำอย่างนั้นได้ เพราะว่า เผื่อเราต้องการจะเปลี่ยนแปลงการทำงานของฟังก์ชั่นบางฟังก์ชั่น
สมมติ เรามีคลาสอยู่ตัวหนึ่งซึ่งเราตั้งใจให้มันเป็นคลาสหลักให้คลาสอื่นๆมา extends ออกไปแล้วเขียนฟังก์ชั่นเพิ่มให้แตกต่างกันไป ทีนี้ระบบมันก็ใช้มาๆ แล้ววันหนึ่งเราต้องการสร้างคลาสตัวหนึ่งที่จะต้อง extends มาจากคลาสหลัก แต่ อยากแก้ไขฟังก์ชั่นที่มีอยู่เดิมให้ทำงานแตกต่างออกไป
แบบนี้ทำได้
ดูตัวอย่าง
ถ้าเราประกาศฟังก์ชั่นด้วยคีย์เวิร์ด public มันจะอนุญาติให้เราเขียนฟังก์ชั่นทับอย่างนี้แหละ แต่ถ้าเราไม่อยากให้มีการเขียนทับฟังก์ชั่น เราจะต้องใช้คีย์เวิร์ด final วางไว้หน้าฟังก์ชั่น แล้ว PHP มันจะไม่อนุญาติให้เขียนฟังก์ชั่นทับเอง
ทีนี้บางคนอาจจะสงสัยว่า ก็เราเขียนเอง ทำไมต้องไฟน่งไฟนอล
เอ้าก็ภาษามันไม่ได้ออกแบบมาเพื่อให้คนๆเดียวเขียนเท่านั้น มันอาจจะมีฝ่ายวางแผน ฝ่ายขึ้นโครงคลาส พวกสร้างคลาสให้แล้วคนอื่นเอาไปเขียนต่อ ซึ่งมันจำเป็นต้องป้องกันบางอย่างที่อาจจะก่อให้เกิดบัก
ตัวอย่างข้างล่างนี่เออเร่อ เพราะตรงบรรทัดที่ 12 มีการใส่ final ไว้หน้าฟังก์ชั่น getID นั่นหมายความว่า ห้ามใคร implement ฟังก์ชั่นนี้ใหม่ในคลาสลูก
ให้รำลึกไว้เสมอว่าสิ่งที่เขาออกแบบมา มันมีประโยชน์และมันถูกสร้างขึ้นมาเพื่อแก้ปัญหาแน่นอน ถึงแม้บางครั้งเรายังมองไม่เห็นประโยชน์ก็ตาม
Leave a Reply