การเเขียน PHP แบบ OOP เราจำเป็นจะต้องมีกิจกรรมต่างๆแยกออกมาเป็น Class แล้วเราจะใช้งานข้อมูลของ Class อื่นๆต้องทำยังไง งั้นเราจะมาต่อกันด้วยเรื่องของการสืบทอดเจตนารมณ์ หรือการสืบเชื้อสายพันธุกรรมของ class หนึ่งเพื่อเอามาใช้กับอีก class หนึ่งกันนะครับ
เริ่มจากก่อนอื่นเลย เมื่อเราเขียน Class ขึ้นมาเสร็จแล้ว ใน Class นั้นๆเราอาจจะมี function พิเศษที่ทำงานได้มากกว่า 1 ครั้งซึ่งเราก็จะสามารถนำมา Reuse ใช้ซ้ำใหม่ภายในได้อีกรอบ แต่การที่เราจะเขียนให้แต่ละ class นั้นสามารถใช้งานร่วมกันได้เราจะต้องทำอย่างไร
Inheritance หรือการสืบทอดเป็นคำตอบครับ
เราสามารถที่จะหยิบเอาความสามารถหรือค่า ข้อมลใดที่อย่ใน class อื่นๆมาใช้งานกับเราได้ง่ายเพียงแค่เราทำการกำหนดให้ class ใหม่ของเรานั้นสืบเชื้อสายมาจาก Class แม่แบบ
ลองนึกถึงครอบครัวเราดูนะครับ หากเราอยากให้ลูกเราผิวขาว เราก็คงต้องให้พ่อกับแม่เราเป็นคนผิวขาวทั้งคู่ และหากอยากให้ลูกเป็นคนตัวสูง หน้ากลม ผมหยิก ตาดำหรืออะไรก็ตามเราก็คงต้องดูจากพ่อแม่ว่าจะมีคุณสมบัติเหล่านี้เป็นอย่างไร
งั้นมาลองดูตัวอย่าง การสืบทอด ในแบบของ PHP กันเลยนะครับ ก่อนอื่นผมจะทำการสร้าง Class แรกขึ้นมาก่อน
<?php class mainClass{ public $name="PHP"; public function hello() { echo "Hello ".$this->name; } ?>
เป็น Class ง่ายๆนะครับ แค่เก็บ Property name กับ Method ชื่อ hello ซึ่งมีความสามารถในการ echo คำว่า Hello ออกมาเท่านั้นเองแล้ว save ไว้ในไฟล์ชื่อ mainClass.php
ส่วน class ที่สองผมจะสร้างขึ้นมาเก็บไว้ในไฟล์ชื่อ testClass.php โดยแค่เรียกใช้ความสามารถของ Method hello() เท่านั้นเองครับ
<?php class testClass { public function testMethod() { $oMainClass = new mainClass(); $oMainClass->hello(); } } ?>
ใน class นี้ผมทำการเรียก class ที่ชื่อ mainClass ออกมาซึ่งมันถูกเขียนไว้ที่ไฟล์ชื่อ mainClass.php แต่ทีนี้ถ้ารันระบบตอนนี้ก็คงจะไม่เกิดอะไรขึ้นหรือไม่ก็ Error นะครับ เพราะไฟล์ testClass.php ถูกเขียนขึ้นมาแยกออกจากกันกับไฟล์ mainClass.php แบบนี้ยังไม่สามารถทำงานได้ เราต้องทำการดึงไฟล์เข้ามาหากันก่อนนะครับ ซึ่งเราจะใช้ include หรือ require_once ก็ได้
<?php include ("main.php"); ?>
จากนั้นเราจะต้องกำหนดให้ class ที่ชื่อ testClass นั้นได้สืบทอดค่ามาจากแม่แบบอย่าง mainClass ด้วยคำสั่ง extends
<?php class testClass extends mainClass
ทีนี้ทั้ง 2 class ของเราก็จะสืบมอดกันมาอย่างสมบูรณ์แล้ว คราวนี้ผมก็สามารถเรียก Method ของ mainClass ได้ซะที
public function testMethod() { $oMainClass = new mainClass(); $oMainClass->hello(); }
โดยผมทำการสร้าง Object ขึ้นมาก่อน แล้วก็เรียกไปที่ Method ของ mainClass อีกทีเพียงเท่านี้เวลาแสดงผลจริงก็จะได้ข้อมูลออกมาว่า Hello PHP
ตอนนี้เราก็รู้วิธีการที่จะเรียกใช้งาน Class ผ่านทาง การสืบทอดแล้วนะครับ อยากให้ทุกคนที่พยายามจะเปลี่ยนตัวเองจากแนวทางของ procedural มาเป็น OOP จริงๆไม่ได้ยากนักแต่ควรลืมกระบวนการคิดแบบเป็นลำดับขั้นตอนลงมาเรื่อยๆไปซะ แล้วคิดแต่เพียงว่าจะทำอะไรจากนี้ควรแยกออกมาเป็นชิ้นเป็นวัตถุๆไปจะดีกว่านะครับ