สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

PHP OOP การถ่ายทอดคุณสมบัติของคลาส(Inheritance)

คุณสมบัตินี้เป็นคุณสมบัติที่เรียกว่า ถ่ายทอดคุณสมบัติของคลาส ฟีเจอร์นี้มีประโยชน์สุด ๆ ในการเพิ่มฟีเจอร์ย่อยหรือผลพลอยได้จากการพัฒนาแบบหลาย ๆ คนทำงานร่วมกัน หรือจะเป็นลักษณะการพัฒนาต่อยอด ขยายขีดความสามารถของบางฟีเจอร์ออกไป

    ก่อนที่จะอ่านต่อไป เราจำเป็นต้องเข้าใจเรื่อง Accessing Properties and Methods  หรือบางคนจะเรียก visibility class เสียก่อน ถ้ายังไม่ได้อ่านให้กลับไปอ่าน PHP OOP ตอนที่ 2 3คำที่ควรรู้กับการสร้างคลาส public, protected, private

    การเขียนเราจะใช้  extends  ต่อจากคลาสของเราแล้วตามด้วยชื่อ main class ที่เราต้องการ  ให้ดูจากตัวอย่างโค้ดด้านล่าง และพิจารณาจากโค้ดเพื่อที่จะความเข้าใจในคุณสมบัิตินี้มากขึ้น
 

 
  1. class  MyPets {
  2.     public $name;
  3.  
  4.     function HasLegs($AmountOfLegs) {       
  5.         echo  "My Pet is {$this->name} , has {$AmountOfLegs} legs";
  6.         echo $this->HasTail();
  7.     }   
  8.     protected function MakeSound($voice) {
  9.         echo  ", makes sound {$voice}.";
  10.     }
  11.  
  12.     private  function HasTail() {
  13.         echo ', has a tail';
  14.     }   
  15. }
  16.  
  17. class MyDog extends MyPets {   
  18.    
  19.     private function CanRun() {
  20.         echo "and can ran too.";
  21.     }
  22.  
  23.     function ShowMyPet() {
  24.         echo $this->HasLegs('4');
  25.         echo $this->MakeSound('box box');
  26.         echo $this->CanRun();
  27.     }
  28. } 


    ด้านบนคือตัวอย่างประกอบ การอธิบายของผม ไม่ต้องซีเรียสอะไรมากนัก แน่นอนเราจะเห็นว่า การทำextending class หรือ inheritance class นั้นจะ้ต้องมีอย่างน้อย 2 class คือ main class (คลาสหลักที่เราต้องการสืบทอดคุณสมบัติออกมา) และ subclass ( คลาสใหม่ของเรา)

    เช่นด้านบนเรามี main class คือ MyPets ซึ่งสามารถมีขา มีหาง และสามารถทำเสียงได้ แต่ผมอยากได้ หมาสักตัว ซึ่งผมอยากให้มันสามารถวิ่งได้ด้วย ผมจึงสร้างคลาสใหม่ แต่ผมเห็น main class มีคุณสมบัติซึ่งสามารถมีขา มีหาง และสามารถทำเสียงได้ด้วย ผมจึงขยายความสามารถนี้ออกมาโดยไม่ต้องเขียนขึ้นใหม่อีก ผมจึง extends class มาใช้เลย 
 

 
  1. class MyDog extends MyPets {     
  2.    // my code
  3. } 


จากนั้นผมก็ใส่คุณสมบัติใหม่ที่ผมอยากได้เข้าไป ให้สามารถวิ่งได้ด้วยอีก  นี่คือหลักการคิดครับ น่าจะเข้าใจได้ครับ อธิบายบ้าน ๆ สุด ไม่เน้นทฤษฏีเท่าไรนัก ตามสไตร์ผมล่ะ

แต่ในกรณีที่เราไม่ต้องการให้มีการ extends class ของเราอีก เราสามารถกำหนดเพื่อบอกว่า ไม่ต้อง extends class นี้อีกต่อไป ก็ให้ใช้ final นำหน้า class นั้น เช่น
 

 
  1. final class MyPets {     
  2.    // my code
  3. } 

ที่มา : คุณสมบัตินี้เป็นคุณสมบัติที่เรียกว่า ถ่ายทอดคุณสมบัติของคลาส ฟีเจอร์นี้มีประโยชน์สุด ๆ ในการเพิ่มฟีเจอร์ย่อยหรือผลพลอยได้จากการพัฒนาแบบหลาย ๆ คนทำงานร่วมกัน หรือจะเป็นลักษณะการพัฒนาต่อยอด ขยายขีดความสามารถของบางฟีเจอร์ออกไป

    ก่อนที่จะอ่านต่อไป เราจำเป็นต้องเข้าใจเรื่อง Accessing Properties and Methods  หรือบางคนจะเรียก visibility class เสียก่อน ถ้ายังไม่ได้อ่านให้กลับไปอ่าน PHP OOP ตอนที่ 2 3คำที่ควรรู้กับการสร้างคลาส public, protected, private

    การเขียนเราจะใช้  extends  ต่อจากคลาสของเราแล้วตามด้วยชื่อ main class ที่เราต้องการ  ให้ดูจากตัวอย่างโค้ดด้านล่าง และพิจารณาจากโค้ดเพื่อที่จะความเข้าใจในคุณสมบัิตินี้มากขึ้น
 

 
  1. class  MyPets {
  2.     public $name;
  3.  
  4.     function HasLegs($AmountOfLegs) {       
  5.         echo  "My Pet is {$this->name} , has {$AmountOfLegs} legs";
  6.         echo $this->HasTail();
  7.     }   
  8.     protected function MakeSound($voice) {
  9.         echo  ", makes sound {$voice}.";
  10.     }
  11.  
  12.     private  function HasTail() {
  13.         echo ', has a tail';
  14.     }   
  15. }
  16.  
  17. class MyDog extends MyPets {   
  18.    
  19.     private function CanRun() {
  20.         echo "and can ran too.";
  21.     }
  22.  
  23.     function ShowMyPet() {
  24.         echo $this->HasLegs('4');
  25.         echo $this->MakeSound('box box');
  26.         echo $this->CanRun();
  27.     }
  28. } 


    ด้านบนคือตัวอย่างประกอบ การอธิบายของผม ไม่ต้องซีเรียสอะไรมากนัก แน่นอนเราจะเห็นว่า การทำextending class หรือ inheritance class นั้นจะ้ต้องมีอย่างน้อย 2 class คือ main class (คลาสหลักที่เราต้องการสืบทอดคุณสมบัติออกมา) และ subclass ( คลาสใหม่ของเรา)

    เช่นด้านบนเรามี main class คือ MyPets ซึ่งสามารถมีขา มีหาง และสามารถทำเสียงได้ แต่ผมอยากได้ หมาสักตัว ซึ่งผมอยากให้มันสามารถวิ่งได้ด้วย ผมจึงสร้างคลาสใหม่ แต่ผมเห็น main class มีคุณสมบัติซึ่งสามารถมีขา มีหาง และสามารถทำเสียงได้ด้วย ผมจึงขยายความสามารถนี้ออกมาโดยไม่ต้องเขียนขึ้นใหม่อีก ผมจึง extends class มาใช้เลย 
 

 
  1. class MyDog extends MyPets {     
  2.    // my code
  3. } 


จากนั้นผมก็ใส่คุณสมบัติใหม่ที่ผมอยากได้เข้าไป ให้สามารถวิ่งได้ด้วยอีก  นี่คือหลักการคิดครับ น่าจะเข้าใจได้ครับ อธิบายบ้าน ๆ สุด ไม่เน้นทฤษฏีเท่าไรนัก ตามสไตร์ผมล่ะ

แต่ในกรณีที่เราไม่ต้องการให้มีการ extends class ของเราอีก เราสามารถกำหนดเพื่อบอกว่า ไม่ต้อง extends class นี้อีกต่อไป ก็ให้ใช้ final นำหน้า class นั้น เช่น
 

 
  1. final class MyPets {     
  2.    // my code
  3. } 
ที่มา: http://www.worldphp.com/