การเขียน PHP แบบ OOP ตอนที่ 3 การสร้าง constructor

การเขียน PHP แบบ OOP

การเขียน PHP แบบ OOP ตอนที่ 3 การสร้าง constructor

เรามาตอนจากครั้งก่อน การเขียน PHP แบบ OOP ตอนที่ 2 ผมแนะนำให้ดาวโหลดโค้ดจากครั้งก่อนด้วยนะครับ เพราะผมจะทำต่อจากครั้งก่อนโดย ครั้งนี้จะเป็นการสร้าง construtor ของ class ซึ่งในหลักการของ OOP นั้นการมี constructor นั้นก็เพื่อกำหนดค่าเริ่มต้นให้ object ของ class ที่สร้างขึ้นเพื่อให้มันสามารถทำงานได้ตามที่ผู้ออกแบบคลาสตั้งใจ โดยใน PHP นั้นมันเป็นภาษาออกแนว script ผมเลยรู้สึกว่า constructor ของ php มันออกจะ dynamic พอสมควรแต่ไม่รู้ว่าจะส่งผลให้ทำงานช้ารึเปล่า

โดยเริ่มแรกให้ทำการสร้าง constructor ในไฟล์ class.Student.inc โดยมีโค้ดดังนี้

[sourcecode language=”php”]
function __construct($data = array())
{
if(count($data) > 0){
foreach($data as $name => $value){
$this->$name = $value;
}
}
}

[/sourcecode]

ใน php นั้นหากชื่อ method ขึ้นต้นด้วย under scorce 2 ตัวจะเป็นการใช้ magic method คือมันจะเป็นรูปแบบ method dynamic ใน oop ของ php ซึ่งใน construtor นั้นก็ขึ้นต้นด้วย _ 2 ตัวเหมือนกัน

จากนั้นก็ไปแก้ไข้ที่ไฟล์ index.php โดยให้ลบ

[sourcecode language=”php”]

$student->setFirstName(‘Thaicoding’);
$student->setLastName(‘.Com’);

[/sourcecode]

ออก จากนั้นบรรทัดที่ new object นั้นให้ทำการส่ง array ข้อมูลเพื่อทำการกำหนดข้อมูลเริ่มต้นให้ object โดยเปลี่ยนโค้ดเป็นดังนี้

$student = new Student(array(‘firstName’ =>’Thaicoding’, ‘lastName’ => ‘.Com’));

จากนั้นลองรันไฟล์ index.php อีกครั้ง

การเขียน PHP แบบ OOP

จะเห็นมา array ที่ส่งไปในตอนใช้คำสั่ง new object นั้นจะส่งไปยัง constructor เพื่อไปกำหนดให้ member ใน class นั้นเอง โดยสังเกตโค้ดใน construtor นั้น

[sourcecode language=”php”]

if(count($data) > 0){
foreach($data as $name => $value){
$this->$name = $value;
}

[/sourcecode]

จะเห็นว่าจะมีการเช็คว่ามีข้อมูลส่งมาหรือถ้ามีก็จะวนลูปจนครบข้อมูลทั้งหมดจากนั้นจะแยกเป็นชื่อกับค่าแล้วกำหนดให้ member ตามชื่อ ที่คู่กับค่านั้นเอง

นั้นก็หมายความว่า ข้อมูล array(‘firstName’ =>’Thaicoding’, ‘lastName’ => ‘.Com’) จะเป็น ‘ชื่อ member’ => ‘ค่าที่ต้องการกำหนด’ ซึ่งจากวิธีการนี้เราสามารถกำหนดค่าเริ่มต้นให้ object ผ่าน constructor ให้ member ทุกตัวใน class ที่มีนั้นเองและหากมันไม่มีชื่อ member ที่เราส่งไปกับ array ข้อมูลมันก็จะไม่ error อีกด้วย ไม่เชื่อก็ลองใส่ array(‘firstName’ =>’Thaicoding’, ‘lastName’ => ‘.Com’,’test’ => ‘123’) ไปให้ construtor ดูครับ

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *