Object Oriented กับ JavaScript ตอนที่ 2

จากที่เราได้เรียนรู้วิธีการประกาศ Class , การสร้าง Constructor และการกำหนด Property ให้กับ Object กันมาแล้ว ใน Object  Oriented กับ JavaScript ตอนที่ 1

ต่อไปเราจะพูดถึงการสร้าง method ให้กับ Class ของเรา โดยเราจะใช้ keyword prototype ซึ่งเราสามารถย้อนกลับไปอ่านเรื่องของการใช้งาน prototype ใน JavaScript ได้ที่การ Casting ใน JavaScript ในบทความนี้เราจะทำเรื่องของการใช้ prototype มาประยุกต์ใช้งาน โดยถ้าเราอยากให้ Method หรือ function อยู่ภายใน Object ใด เราจะใช้การกำหนดให้เป็น function ใน prototype ของ Object นั้น เช่น

เวลาเราจะทำการเรียกใช้เราก็จะ new object Person ขึ้นมาแล้วเรียก method say Hello ได้เลย

นอกนี้เรายังสามารถทำให้ sayHello() กลายเป็น Chain method เหมือนใน jQuery ได้โดยทำการ return this ออกมา

ดูรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างและการใช้งาน Chain Method ได้ใน ารสร้าง Chain method ใน PHP

การสร้าง Chain method ใน PHP

ถ้าใครเคยใช้งาน jQuery จะเห็นว่าจุดเด่นเรื่องนึงก็คือการสร้าง Chain method ยกตัวอย่างเช่นเราอยากจะทำการกำหนด style ให้กับ div แล้วหลังจากนั้นให้ทำการ slideUp เราสามารถเขียนได้แบบนี้

1
$("div").css("color","red").slideUp();

เราสามารถนำ concept นี้มาใชใน PHP ได้เช่นเดียวกัน โดยการเขียนนี่เรียกได้ว่าง่ายแบบที่คิดไม่ถึงเลยทีเดียว ยกตัวอย่างเช่นถ้าเราอยากจะทำการ addProduct() เข้าไปใน stock แล้วสามารถเรียก method checkAvailable() ต่อกันได้เลย เช่น

1
2
3
$stock = new Stock();
$isAvailable = $stock->addProduct('P001', 10)
->checkAvailable('P001', 20);

จากตัวอย่างเราจะเห็นว่าเราสามารถเขียน ธรรมดาก็ได้ แต่ต้องใช้ 2 บรรทัด แต่ถ้าเราใช้ chain method เราสามารถเขียนได้สั้นลง และสื่อความหมายได้ดีขึ้นและถ้าใครใช้ CodeIgniter คงจะคุ้นเคยการเขียนในรูปแบบนี้เพราะใน Active Record ของ CodeIgniter สามารถเขียนแบบ Chain Method ได้ เช่น

1
2
3
4
5
6
7
8
$this->db->select('*');
->from('blogs');
->join('comments', 'comments.id = blogs.id');
->where('name', $name);
->where('title', $title);
->where('status', $status);

$query = $this->db->get();

จากตัวอย่างเราสามารถเขียนสลับบรรทัดกันได้ ทำให้ code ของเราอ่านได้ง่ายขึ้น

วิธีการเขียนก็ง่ายมากใน method ไหนที่ต้องการให้มี chain ต่อไปเราก็ทำการ return $this หรือ object ปัจจุบันออกไปเท่านี้ก็สามารถเรียกใช้งาน method อื่นๆใน class นี้ได้แล้ว ตามตัวอย่าง

1
2
3
4
5
6
7
8
9
10
11
class Stock{
function addProduct($product_id, $qty){
// do something
return $this;
}

function checkAvailable($product_id, $qty){
// do something
return $this;
}
}

เวลาเรียกใช้งาน ก็เขียน code แบบนี้

1
2
3
$stock = new Stock();
$isAvailable = $stock->addProduct('P001', 10)
->checkAvailable('P001', 20);

หวังว่าคงจะเอาเทคนิคนี้ไปช่วยทำให้ code ของเราสั้นลง อ่านง่าย และใกล้เคียงภาษามนุษย์มากขึ้น พบกันใหม่บทความถัดไปครับ