การเขียน PHP แบบ OOP ตอนที่ 2
ในตอนที่แล้ว ภาษา PHP: การเขียนแบบ OOP ตอนที่ 1 เป็นเนื้อหาเกี่ยวกับการสร้าง class และ object เบื้องต้นในครั้งนี้จะพูดถึง การสร้าง method get กับ set
โดยเริ่มจากโค้ดจากตอนที่แล้วโดยเปลี่ยนโค้ดดังนี้
[sourcecode language=”php”]
class Student{
private $firstName;
private $lastName;
public function display()
{
$display = 'FistName: ' . $this->firstName;
$display .= ‘
‘;
$display .= ‘LastName: ‘ . $this->lastName;
return $display;
}
public function setFirstName($name)
{
$this->firstName = $name;
}
public function setLastName($name)
{
$this->lastName = $name;
}
public function getFirstName()
{
return $this->firstName;
}
public function getLastName()
{
return $this->lastName;
}
}
[/sourcecode]
เมื่อลองรันไฟล์ index.php ที่ทำมาจากตอนก่อนก็จะได้ดังนี้
สังเกตว่าโค้ดใน Class Student มีการเปลี่ยน modifier จาก public เป็น private เพื่อไม่ให้ object ที่สร้างขึ้นไม่สามารถอ้างอิง member fistName และ lastName หรือเปลี่ยนแปลงค่าได้โดยตรงจึงทำการสร้าง method get และ set ขึ้นมาตามโค้ด
เมื่อลองแก้ไฟล์ index.php ตามโค้ดต่อไปนี้
[sourcecode language=”php”]
Test Class Student
‘;
$student = new Student();
echo ‘
Set Property Class Student
‘;
$student->setFirstName(‘Thaicoding’);
$student->setLastName(‘.Com’);
echo ‘
' . print_r($student) . '
‘;
echo ‘
Function Display
‘;
echo $student->display();
echo ‘
Function get FirstName
‘;
echo $student->getFirstName();
echo ‘
Function get LastName
‘;
echo $student->getLastName();
?>
[/sourcecode]
เมื่อลองรันไฟล์ index.php ก็จะได้ดังรูป
สังเกตว่า method setFirstName กับ setLastName จะทำการกำหนดค่า member firstName และ lastName ตามค่าที่ส่งเข้าโดย object จะสามารถทำการเรียกใช้งานให้ดูตัวอย่างในไฟล์ index.php คือ $student->setFirstName(‘Thaicoding’);
ส่วน method get นั้นก็แค่ทำการ return ค่า member ที่ต้องการออกมาให้กับ object ที่เรียกใช้งาน ในการทำ method get set นั้นเพื่อป้องกันการเข้าถึง member ของ object ของ class โดยตรงหรือที่เรียกว่า Encapsulation เพื่อให้คนที่เอา class ไปใช้งานนั้นไม่ทำการอ้างอิงถึงจนทำให้เกิดความผิดพลาดของการทำงานของโปรแกรมเกิดขึ้น
ใน php นั้นจะมี magic method ของ _get กับ _set อยู่แต่ในเบื้องต้นนี้ผมเขียนบทความขั้นพื้นฐานก่อนแล้วค่อยหาโอกาสเขียนบทความในรายละเอียดต่อไป