คลาส ในภาษา PHP

8 January 2017

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

คลาสคืออะไร

คลาส (Class) คือประเภทข้อมูลที่นำไปสร้างออบเจ็ค (Object) คลาสถูกกำหนดขึ้นมาโดยมีสมาชิกที่เป็นตัวแปร ฟังก์ชัน และคอนสตรัคเตอร์ (Constructor) และ Destructor หรือกล่าวอีกนัยหนึ่งคลาสเป็นเทมเพลตในการนำไปสร้างออบเจ็คโดยมีการกำหนดค่าเริ่มต้นและฟังก์ชันการทำงาน

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

นี่เป็นรูปแบบของการประกาศคลาสในภาษา PHP

class ClassName {
    // members and specifications
    ...
}

โดยที่ ClassName เป็นชื่อของคลาสที่มีหลักการตั้งชื่อเหมือนตัวแปร แต่สำหรับคลาส โดยทั่วไปแล้วเราจะนิยมใช้ชื่อโดยขึ้นต้นด้วยตัวพิมพ์ใหญ่และในระหว่างคำ ภายในคลาสจะเป็นกำหนดสมาชิกของคลาสโดยมีการกำหนดการเข้าถึง (Visibility) นี่เป็นประเภทสมาชิกของคลาสที่สามารถมีได้ในภาษา PHP

  • Properties- คือสมาชิกที่เป็นคุณสมบัติของคลาสที่เป็นข้อมูลประเภทตัวแปร ซึงอาจจะเป็นตัวแปรพื้นฐาน ค่าคงที่ หรือออบเจ็ค
  • Method- คือการกำหนดการทำงานของคลาส เมธอดคือคำที่ใช้เรียกฟังก์ชันเมื่อมันถูกประกาศอยู่ในคลาส หรือในบริบทของการเขียนโปรแกรมเชิงวัตถุ
  • Constructor และ Destructor- คอนสตรัคเตอร์คือเมธอดชนิดหนึ่งที่จะถูกเรียกใช้ในตอนที่ออบเจ็คถูกสร้าง มันมักจะใช้สำหรับกำหนดค่าเริ่มต้นให้กับออบเจ็ค ส่วน Destructor คือเมธอดที่จะถูกเรียกใช้เมื่อออบเจ็คถูกทำลาย ทั้งสองเมธอดนี้มีชื่อของมันโดยเฉพาะ

โดยปกติแล้ว ในการสร้างคลาส เราต้องทำการกำหนดระดับการถึงให้กับตัวแปรเสมอ ยกเว้นเมธอดที่มีค่าพื้นฐานเป็น public ถ้าหากไม่มีการกำหนดระดับการเข้าถึง (Access specifier) มาดูตัวอย่างการสร้างคลาสในภาษา PHP

<?php

class User {

    public $firstName;
    public $lastName;
    public $homeTown;
    private $birthYear;

    public function indroduce() {
        echo "I'm $this->firstName $this->lastName\n";
        echo "I live in $this->homeTown\n";
    }

    public function setBirthYear($birthYear) {
        $this->birthYear = $birthYear;
    }

    public function getAge() {
        $currentYear = 2017;
        $age = $currentYear - $this->birthYear; 
        return $age;
    }

}

?>

ในตัวอย่าง เป็นการประกาศคลาสชื่อ User ซึ่งเป็นคลาสสำหรับเก็บข้อมูลของผู้ใช้ คลาสนี้มีสมาชิกเป็นตัวแปร 4 ตัว สำหรับเก็บข้อมูลของผู้ใช้ มีคอนสตรีคเตอร์สำหรับกำหนดค่าเริ่มต้นให้กับออบเจ็ค และมี 3 เมธอด

ทั้งตัวแปรและเมธอดที่เป็นสมาชิกของคลาสนั้นจะต้องมีการกำหนดระดับการเข้าถึง เช่น ตัวแปร $firstName มีระดับการเข้าถึงเป็นแบบ public และเมธอด indroduce() มีระดับการเข้าถึงเป็นแบบ public ส่วนตัวแปร $birthYear มีระดับการเข้าถึงเป็นแบบ private อย่างไรก็ตามเราจะพูดเกี่ยวกับ Access specifiers ในภายหลัง

Constructor และ Destructor

ในการเขียนโปรแกรมบางครั้ง คุณก็จำเป็นต้องการกำหนดค่าให้กับออบเจ็คในตอนที่สร้างและทำบางอย่างหลังจากที่ออบเจ็คถูกทำลาย ซึ่งคุณสามารถกำหนดการงานได้โดยประกาศเมธอด __construct() และ __destruct() ซึ่งเป็นทางเลือกเมื่อคุณสร้างคลาส

<?php

class User {

    public $firstName;
    public $lastName;
    public $homeTown;
    private $birthYear;

    public function __construct($firstName, $lastName) {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function __destruct() {
        // code when object is destroyed
    }

    public function indroduce() {
        echo "Hello, my $this->firstName $this->lastName.";
        echo "I live in $this->homeTown.";
    }

    public function setBirthYear($birthYear) {
        $this->birthYear = $birthYear;
    }

    public function getAge() {
        $currentYear = 2017;
        $age = $currentYear - $this->birthYear; 
        return $age;
    }

}

?>

นี่เป็นตัวอย่างในการประกาศคอนสตรัคเตอร์และ Destructor ในภาษา PHP สำหรับคอนสตรัคเตอร์นั้นในตอนสร้างออบเจ็ค คุณจำเป็นต้องส่งพารามิเตอร์ที่เป็นชื่อและนามสกุลขของผู้ใช้มาด้วยเสมอ สำหรับ Destructor นั้นจะถูกเรียกใช้เมื่อมีการทำลายออบเจ็ค เช่น การใช้ฟังก์ชัน unset() เป็นต้น

เมื่อคลาสมีการประกาศ Constructor ภายในคลาส ในตอนสร้างออบเจ็ค คุณต้องส่งพารามิเตอร์สำหรับ Constructor เสมอ

Access specifiers

Access specifiers คือคำสั่งในการกำหนดการเข้าถึงที่เราใช้กับการประกาศตัวแปรภายในคลาสหรือเรียกอีกอย่าหนึงว่า Property Visibility ในภาษา PHP มี Access specifier อยู่ด้วยกัน 3 แบบดังนี้

  • public - ตัวแปรหรือเมธอดสามารถเข้าถึงได้จากทุกที่ในโปรแกรม
  • protected - ตัวแปรหรือเมธอดสามารถเข้าถึงได้จากในคลาสเดียวกันหรือคลาสที่ได้รับการสืบทอด (Inheritance)
  • private - ตัวแปรหรือเมธอดสามารถเข้าถึงได้จากในคลาสเดียวเท่านั้น
class User {

    public $firstName;
    public $lastName;
    public $homeTown;
    private $birthYear;
...

นี่เป็นการกำหนด Access specifier ให้กับตัวแปรซึ่งเราจะกำหนดไว้หน้าตัวแปรหรือฟังก์ชัน อย่างไรก็ตาม คุณจะได้เรียนเกี่ยวกับ Class Visibility ในภายหลังของบทเรียนนี้

class ClassName {

    // Can only be public
    function __construct($firstName, $lastName) {
        ...
    }

    // This is public
    function methodName() {
        ...
    }

}

ในภาษา PHP เมธอดสามารถที่จะไม่กำหนด Access specifier ได้ โดยเมธอดนั้นจะมีการเข้าถึงเป็นแบบ public และ Construct นั้นจะเป็น public เสมอ

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับคลาสและวิธีการสร้างคลาสในภาษา PHP ในบทต่อไปจะเป็นการนำคลาสไปสร้างเป็นออบเจ็คเพื่อเอาไปใช้งาน

บทความนี้เป็นประโยชน์หรือไม่?Yes·No