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

Office of Academic Resources and Information Technology

PHP OOP การสร้างคลาส public, protected, private

OOP ของภาษา php จะแนะนำให้รู้จัก 3 คำที่คุณควรรู้เกี่ยวกับการสร้างคลาส 3 คำนี้มีความสำคัญมากต่อการเข้าถึงของคลาส(Accessing Properties and Methods)ที่อยากแนะนำคือ

1. การกำหนดคุณสมบัติแบบ public คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากทั้งภายในและภายนอกคลาสอีกทั้งสามารถสืบทอด(Inheritance)ต่อไปคลาสย่อย(subclass)ได้
2. การกำหนดคุณสมบัติแบบ protected คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากภายในคลาสย่อย(subclass)ที่เกิดจากการถ่ายทอดคุณสมบัติ(Inheritance)   เท่านั้น 
3. การกำหนดคุณสมบัติแบบ private  คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากคลาสตนเองเท่านั้น

   โดยคุณสมบัติการเข้าถึงนี้จะมีผลทั้งส่วนของ คุณสมบัติ(Property)และเมธอด(Method)ของคลาส การทำความเข้าใจกับ 3 คำนี้จะอธิบายผ่าน โค้ดตัวอย่างคลาสด้านล่าง 
 

 
  1.  
  2. <?php
  3. class  MyPets {
  4.     // กำหนดตัวแปรแบบ public
  5.     public $name;
  6.     // กำหนดตัวแปรแบบ protected
  7.     protected $color;
  8.     // กำหนดตัวแปรแบบ private
  9.     private $var3;
  10.      
  11.     function HasLegs($AmountOfLegs) {       
  12.         echo  "My Pet is {$this->name} , has {$AmountOfLegs} legs";
  13.         echo $this->HasTail();
  14.     }   
  15.     protected function MakeSound($voice) {
  16.         echo  ", makes sound {$voice}.";
  17.     }
  18.  
  19.     private  function HasTail() {
  20.         echo ', has a tail';
  21.     }   
  22. }
  23.  
  24. class MyDog extends MyPets {   
  25.     private $var4;
  26.    
  27.     private function CanRun() {
  28.         echo "and can ran too.";
  29.     }
  30.    
  31.     function ShowMyPet() {
  32. // เรียกใช้ public function ของ main class จากภายใน subclass
  33.         echo $this->HasLegs('4');
  34.         // เรียกใช้ protected function ของ main class จากภายใน subclass
  35.         echo $this->MakeSound('box box');
  36. // เรียกใช้ private function ของ subclass จากภายใน subclass
  37.         echo $this->CanRun();
  38.     }
  39.    
  40.     function TestMethod() {
  41. // เรียกใช้ private function ของ main class จากภายใน subclass
  42.         Echo $this->HasTail();
  43.     }
  44. }


    คลาสด้านบนเป็นคลาสตัวอย่างของผมเอง คือคลาสสัตว์เลี้ยง มีเมธอด 2 เมธอดด้วยกัน แต่มีการประกาศ ตัวแปรไว้ 3 ประเภททั้ง publicprotected และ private 

     สำหรับเมธอด(Method) หากไม่ระบุคุณสมบัติดังกล่าวข้างต้น โดยค่าเริ่มต้นจะเป็น public เสมอ

     ถ้าเป็นไปได้ก็ให้นำโค้ดตัวอย่างไปทดลองรันดูนะครับ แล้วทดลองเรียกใช้เมธอดต่าง ๆ แล้วจะเข้าใจการใช้คุณสมบัติการเข้าถึงและการแก้ไขตัวแปรเหล่านี้เป็นอย่างดี

 

 
  1. <?php
  2. // การทดสอบการเรียกเข้าถึงจากภายนอก main class
  3. $Obj = new MyPets;
  4. $Obj->name = 'Anna'; 
  5. $Obj->color = 'pink'; // fatal error
  6. $Obj->var3 = 'aaa'; // fatal error
  7. echo $Obj->HasLegs(4);
  8.  
  9.  
  10. // sub class
  11. $Obj2 = new MyDog;
  12. // กำหนดค่าให้กับ public property ของ main class
  13. $Obj2->name = 'Anna'; // ok
  14. // กำหนดค่าให้กับ protected property ของ main class
  15. $Obj2->color = 'pink'; // fatal error
  16.  
  17. // ทดสอบการสร้างเมธอดเรียกใช้งาน private function  ของ main class จากภายนอก subclass
  18. echo $Obj2->HasTail(); // fatal error
  19.  
  20. // ทดสอบการเรียกใช้ protected function ของ main class จากภายนอก subclass
  21. echo $Obj2->MakeSound();  // fatal error
  22.  
  23.  
  24. // ทดสอบการเรียกใช้ public property ของ main class จากภายนอก subclass
  25. echo $Obj2->name;  // ok
  26.  
  27. // ทดสอบการเรียกใช้ protected property ของ main class จากภายนอก subclass
  28. echo $Obj2->color; // fatal error
  29.  
  30. // ทดสอบการเรียกใช้ private property ของ main class จากภายนอก subclass
  31. echo $Obj2->var3; // fatal error
  32.  
  33. // แสดงผล
  34. echo $Obj2->ShowMyPet();
  35.  
  36. ?>
ที่มา : http://www.worldphp.com/