
OOP ของภาษา php จะแนะนำให้รู้จัก 3 คำที่คุณควรรู้เกี่ยวกับการสร้างคลาส 3 คำนี้มีความสำคัญมากต่อการเข้าถึงของคลาส(Accessing Properties and Methods)ที่อยากแนะนำคือ
1. การกำหนดคุณสมบัติแบบ public คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากทั้งภายในและภายนอกคลาสอีกทั้งสามารถสืบทอด(Inheritance)ต่อไปคลาสย่อย(subclass)ได้
2. การกำหนดคุณสมบัติแบบ protected คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากภายในคลาสย่อย(subclass)ที่เกิดจากการถ่ายทอดคุณสมบัติ(Inheritance) เท่านั้น
3. การกำหนดคุณสมบัติแบบ private คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากคลาสตนเองเท่านั้น
โดยคุณสมบัติการเข้าถึงนี้จะมีผลทั้งส่วนของ คุณสมบัติ(Property)และเมธอด(Method)ของคลาส การทำความเข้าใจกับ 3 คำนี้จะอธิบายผ่าน โค้ดตัวอย่างคลาสด้านล่าง
คลาสด้านบนเป็นคลาสตัวอย่างของผมเอง คือคลาสสัตว์เลี้ยง มีเมธอด 2 เมธอดด้วยกัน แต่มีการประกาศ ตัวแปรไว้ 3 ประเภททั้ง public, protected และ private
สำหรับเมธอด(Method) หากไม่ระบุคุณสมบัติดังกล่าวข้างต้น โดยค่าเริ่มต้นจะเป็น public เสมอ
ถ้าเป็นไปได้ก็ให้นำโค้ดตัวอย่างไปทดลองรันดูนะครับ แล้วทดลองเรียกใช้เมธอดต่าง ๆ แล้วจะเข้าใจการใช้คุณสมบัติการเข้าถึงและการแก้ไขตัวแปรเหล่านี้เป็นอย่างดี
1. การกำหนดคุณสมบัติแบบ public คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากทั้งภายในและภายนอกคลาสอีกทั้งสามารถสืบทอด(Inheritance)ต่อไปคลาสย่อย(subclass)ได้
2. การกำหนดคุณสมบัติแบบ protected คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากภายในคลาสย่อย(subclass)ที่เกิดจากการถ่ายทอดคุณสมบัติ(Inheritance) เท่านั้น
3. การกำหนดคุณสมบัติแบบ private คือตัวแปรหรือเมธอดที่สามารถเข้าถึงได้จากคลาสตนเองเท่านั้น
โดยคุณสมบัติการเข้าถึงนี้จะมีผลทั้งส่วนของ คุณสมบัติ(Property)และเมธอด(Method)ของคลาส การทำความเข้าใจกับ 3 คำนี้จะอธิบายผ่าน โค้ดตัวอย่างคลาสด้านล่าง
- <?php
- class MyPets {
- // กำหนดตัวแปรแบบ public
- public $name;
- // กำหนดตัวแปรแบบ protected
- protected $color;
- // กำหนดตัวแปรแบบ private
- private $var3;
- function HasLegs($AmountOfLegs) {
- echo "My Pet is {$this->name} , has {$AmountOfLegs} legs";
- echo $this->HasTail();
- }
- protected function MakeSound($voice) {
- echo ", makes sound {$voice}.";
- }
- private function HasTail() {
- echo ', has a tail';
- }
- }
- class MyDog extends MyPets {
- private $var4;
- private function CanRun() {
- echo "and can ran too.";
- }
- function ShowMyPet() {
- // เรียกใช้ public function ของ main class จากภายใน subclass
- echo $this->HasLegs('4');
- // เรียกใช้ protected function ของ main class จากภายใน subclass
- echo $this->MakeSound('box box');
- // เรียกใช้ private function ของ subclass จากภายใน subclass
- echo $this->CanRun();
- }
- function TestMethod() {
- // เรียกใช้ private function ของ main class จากภายใน subclass
- Echo $this->HasTail();
- }
- }
คลาสด้านบนเป็นคลาสตัวอย่างของผมเอง คือคลาสสัตว์เลี้ยง มีเมธอด 2 เมธอดด้วยกัน แต่มีการประกาศ ตัวแปรไว้ 3 ประเภททั้ง public, protected และ private
สำหรับเมธอด(Method) หากไม่ระบุคุณสมบัติดังกล่าวข้างต้น โดยค่าเริ่มต้นจะเป็น public เสมอ
ถ้าเป็นไปได้ก็ให้นำโค้ดตัวอย่างไปทดลองรันดูนะครับ แล้วทดลองเรียกใช้เมธอดต่าง ๆ แล้วจะเข้าใจการใช้คุณสมบัติการเข้าถึงและการแก้ไขตัวแปรเหล่านี้เป็นอย่างดี
- <?php
- // การทดสอบการเรียกเข้าถึงจากภายนอก main class
- $Obj = new MyPets;
- $Obj->name = 'Anna';
- $Obj->color = 'pink'; // fatal error
- $Obj->var3 = 'aaa'; // fatal error
- echo $Obj->HasLegs(4);
- // sub class
- $Obj2 = new MyDog;
- // กำหนดค่าให้กับ public property ของ main class
- $Obj2->name = 'Anna'; // ok
- // กำหนดค่าให้กับ protected property ของ main class
- $Obj2->color = 'pink'; // fatal error
- // ทดสอบการสร้างเมธอดเรียกใช้งาน private function ของ main class จากภายนอก subclass
- echo $Obj2->HasTail(); // fatal error
- // ทดสอบการเรียกใช้ protected function ของ main class จากภายนอก subclass
- echo $Obj2->MakeSound(); // fatal error
- // ทดสอบการเรียกใช้ public property ของ main class จากภายนอก subclass
- echo $Obj2->name; // ok
- // ทดสอบการเรียกใช้ protected property ของ main class จากภายนอก subclass
- echo $Obj2->color; // fatal error
- // ทดสอบการเรียกใช้ private property ของ main class จากภายนอก subclass
- echo $Obj2->var3; // fatal error
- // แสดงผล
- echo $Obj2->ShowMyPet();
- ?>