การสร้าง 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 ของเราสั้นลง อ่านง่าย และใกล้เคียงภาษามนุษย์มากขึ้น พบกันใหม่บทความถัดไปครับ

รับเขียนโปรแกรมและสอนเขียนโปรแกรมด้วย PHP
ติดต่อสอบถามรายละเอียดเพิ่มเติมได้ที่ 062-419-9498
หรือ E-mail: training@irobust.co.th