คลาส ในภาษา 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 ในบทต่อไปจะเป็นการนำคลาสไปสร้างเป็นออบเจ็คเพื่อเอาไปใช้งาน


บทความเกี่ยวกับ คลาส

String ในภาษา Java

ในบทนี้ คุณจะได้เรียนเกี่ยวกับประเภทข้อมูล String และคลาสของ String โดยละเอียด และนอกจากนี้ยังเรียนรู้ถึงวิธีการใช้เมธอดเพื่อจัดการ String ในภาษา Java String เป...

String ในภาษา Visual Basic

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ string ในภาษา Visual Basic เพราะว่า string นั้นมีเนื้อหาและรายละเอียดค่อนข้างมากสำหรับการเขียนโปรแกรม ดังนั้นเราจึงแบ่งเนื้อหา...

คลาส ในภาษา C#

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

คลาสและออบเจ็ค ในภาษา Java

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

คลาส ในภาษา Visual Basic

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับคลาสและการสร้างคลาสในภาษา Visual Basic ซึ่งเราจะใช้เป็นแม่แบบสำหรับการนำไปสร้างออบเจ็คเพื่อให้โปรแกรมทำงาน ซึ่งคลาสประกอบด้วยสอ...