PHP OOP #1: พื้นฐานการสร้าง Class และ Object

โพสนี้เป็นตอนแรกของซีรีส์เกี่ยวกับการเขียนโปรแกรมแบบ OOP หรือ Object Oriented Programming ด้วยภาษา PHP

โดยก่อนที่จะเข้าสู่เนื้อหาส่วนที่เกี่ยวข้องกับ PHP จะขออธิบายเกี่ยวกับ OOP แบบทั่วๆไปในทางทฤษฎีก่อน ซึ่งหากใครคุ้นเคยกับการเขียนโปรแกรมแบบ OOP อยู่แล้ว สามารถข้ามไปยังหัวข้อตัวอย่างการใช้ OOP ใน PHP ได้เลย

สรุปหัวใจสำคัญของ OOP อย่างรวบรัด คือการเขียนโปรแกรมที่ให้ความสำคัญกับ “วัตถุ” คุณสมบัติ และความสัมพันธ์ของมัน โดยมีศัพท์ที่ต้องรู้จัก ดังนี้

  1. Class(ชนิดของวัตถุ) เป็นเหมือนเทมเพลท เพื่อบอกว่าวัตถุชนิดนี้จะมีคุณสมบัติใดบ้าง โดยคุณสมบัติประกอบด้วย 2 อย่าง คือ สถานะ(state) และ พฤติกรรม(behavior) เช่น คลาส สัตว์เลี้ยง มีสถานะคือ ประเภท, ชื่อ และมีพฤติกรรมคือ กิน
  2. Object(วัตถุ) สร้างขึ้นมาจากคลาส โดยเมื่อเป็นวัตถุแล้ว สถานะ(state) จะกลายเป็น instance variable หรือก็คือตัวแปร และ พฤติกรรม(behavior) จะถูกเรียกว่า method เช่น วัตถุสัตว์เลี้ยง ประเภท สุนัข  ชื่อ เจ้าขาว สามารถ กินอาหาร ได้

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

ตัวอย่างการใช้ OOP ใน PHP

โค้ดตัวอย่างการใช้ OOP ใน PHP แบบพื้นฐาน โดยเริ่มจากการสร้าง Class

class Pet{ 
  public $type; 
  public $name;
 
  function eat(){ 
    echo $name.' is eating '.$type.' food'; 
  }
}

จากนั้นก็จะสามารถสร้างวัตถุขึ้นมาจากคลาสข้างต้นได้ เช่น

$dog = new Pet();
$dog->type = 'Dog'; 
$dog->name = 'Shiro'; 
$dog->eat();

อธิบายโค้ดคือ
บรรทัดที่ 1 สร้างวัตถุจากคลาส Pet ตั้งชื่อตัวแปรว่า dog
บรรทัดที่ 2-3 ใส่ค่า type ว่า “Dog” และ name “Shiro” ให้วัตถุชนิดสัตว์เลี้ยงนี้
บรรทัดที่ 4 สั่งให้เจ้าขาวกินอาหาร บรรทัดนี้จะแสดงข้อความ “Shiro is eating Dog food”

หากต้องการสัตว์เลี้ยงเพิ่ม เราก็สามารถสร้างวัตถุเพิ่มได้เลย โดยไม่ต้องแก้ไขอะไรในคลาสอีก

$cat = new Pet(); 
$cat->type = 'Cat'; 
$cat->name = 'Tom';

เอาโค้ดมารวมกัน ดังนี้

class Pet{ 
  public $type; 
  public $name;
 
  function eat(){ 
    echo $name.' is eating '.$type.' food'; 
  }
}

$dog = new Pet();
$dog->type = 'Dog'; 
$dog->name = 'Shiro'; 

$cat = new Pet(); 
$cat->type = 'Cat'; 
$cat->name = 'Tom';

$dog->eat();
$cat->eat();

ก็คงจะเดากันได้ ว่าเมื่อรันโค้ดดังกล่าว ผลลัพท์ที่จะได้จะมีข้อความ ดังนี้
– Shiro is eating Dog food
– Tom is eating Cat food
ซึ่งแสดงว่าตัวแปรในทั้งสอง object นั้นถูกเก็บแยกเป็นอิสระจากกัน

สำหรับโพสพื้นฐานการสร้าง Class และ Object นี้จะจบไว้เพียงเท่านี้ก่อน โดยหลักการของ OOP นี้ยังมีอีกมากที่ต้องศึกษาและทำความเข้าใจ สามารถติดตามได้ในโพสต่อๆไป