คลาส ในภาษา PHP
ในบทแรกของการเขียนโปรแกรมเชิงวัตถุในภาษา 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 ในบทต่อไปจะเป็นการนำคลาสไปสร้างเป็นออบเจ็คเพื่อเอาไปใช้งาน