GORAGOD.com

include และ require ใช้อย่างไหนดี

คนเขียน PHP หลายคนคงงงกับความแตกต่างของฟังก์ชั่นเหล่านี้
  • include
  • inclue_once
  • require
  • require_once
ซึ่งจริงๆแล้ว ฟังก์ชั่นที่ 4 ก็ทำหน้าที่เดียวกันคือ รวมไฟล์อื่นๆ เข้ามาประมวลผลด้วย เหมือนเป็นไฟล์เดียวกัน

เคล็ดลับสำหรับมือใหม่ เราสามารถส่งผ่านตัวแปรจากหน้าหนึ่งไปยังหน้าที่ถูก include เข้ามา รวมถึง ส่งตัวแปรจากหน้าที่ include เข้ามายังหน้าหลักได้ด้วย
<?php
   $a = 10;
   include('path/to/file2.php');
   echo $a + $b;
?>

โค้ดด้านบนเป็นไฟล์หลัก กำหนดตัวแปร $a ไว้ เท่ากับ 10 และ เราจะส่งตัวแปรนี้ไปประมวลผลที่ file2.php ซึ่งถูก include เข้ามา ซึ่งหลังจากประมวลผลไฟล์ file2.php แล้วก็จะนำค่าตัวแปร $a มาบวกกับ ตัวแปร $b ซึ่งถูกกำหนดใน file2.php
<?php
   $a = $a * 2;
   $b = 80;
?>

โค้ดใน file2.php ครับ ซึ่งแนวคิดง่ายๆของ include (หรือฟังก์ชั่นอื่นๆ ด้านบน) คือเหมือนประมวลผลด้วยไฟล์เดียวกัน

include และ require แตกต่างกันอย่างไร คำตอบให้ดูที่ชื่อมันเลยครับ ทั้ง 2 คำสั่งแต่ต่างกันแค่ สิ่งที่เกิดขึ้นหากไม่พบไฟล์ที่ต้องการ
  • include แปลว่า รวมเข้าด้วยกัน
  • require แปลว่า ต้องการ
ตามความหมายของชื่อ บอกให้รู้ว่า require สำคัญกว่า include ซึ่ง require หากไม่พบไฟล์ที่ต้องการ PHP จะคืนค่า Error และ หยุดหารทำงาน ซึ่งต่างจาก include หากไม่พบไฟล์ที่ต้องการ มันจะทำแค่แสดงข้อความเตือน แต่มันจะยังถูกประมวลผลต่อไปจนจบ ซึ่งถ้าดูจากผลลัพท์ของมัน หมายความว่า
  • ถ้าไฟล์ที่ต้องการรวม จะขาดเสียมิได้ ถ้าไม่มีการทำงานระบบจะผิดพลาดร้ายแรง ให้ใช้ require เพื่อป้องกันการทำงานต่อ ซึ่งอาจเกิดผลเสียกับระบบ
  • ถ้าไฟล์ที่ต้องการ เป็นแค่ การทำงานที่ไม่จำเป็น อาจละเสียก้ได้(หรืออาจไม่มีอยู่ในระบบ) ก็ให้ใช้ include
include_once และ require_once มีความหมายเหมือนกับ 2 คำสั่งด้านบน แตกต่างกันตรงที่ คำสั่งที่มี once จะยอมให้มีการรวมไฟล์เข้ามาได้เพียงครั้งเดียวเท่านั้น

ประเด็นเรื่องความเร็ว include และ require
จากการทดสอบ require จะทำงานได้เร็วกว่า include เล็กน้อย ซึ่งตามความเห็นของผม การใช้งานในแง่นี้ ผมแนะนำให้ดูที่จุดประสงค์ของไฟล์ที่ต้องการมากกว่า ส่วน ระหว่างที่มี once กับที่ไม่มี once คำสั่งที่มี once จะประมวลผล ช้ากว่าครับ เนื่องจากคำสั่งที่มี once จะต้องเสียเวลาในการตรวจสอบว่าไฟล์ถูกเรียกใช้งานแล้วหรือยัง ยกตัวอย่างเช่น การโหลด class ขนาดใหญ่
มีอีกประเด็นหนึ่งที่น่าสนใจ คือ หากเราจำเป็นต้อง include ไฟล์ขนาดใหญ่ และมีโอกาสที่จะ include มากกว่า 1 ครั้งแล้ว การใช้คำสั่งที่มี once จะทำงานเร็วกว่านะครับ เนื่องจาก การประมวลผลไฟล์ขนาดใหญ่ อาจใช้เวลามากกว่าการตรวจสอบว่าไฟล์ได้ถูกรวมเข้ามาหรือยัง

คำแนะนำในการเลือกใช้
  • ผมแนะนำว่าเราไม่ควรอกแบบให้มีการ include ไฟล์แต่ละไฟล์เกินกว่า 1 ครั้ง เนื่องจากการ include ไฟล์ในแต่ละครั้ง PHP ยังจะต้องเสียเวลาส่วนหนึ่งไปกับการตรวจสอบ PATH ที่ถูกต้องของไฟล์ก่อนการเรียกใช้เสมอ หากมีความจำเป็นจะต้องใช้หน้าที่ include เพื่อประมวลผล หลายๆครั้ง ผมแนะนำให้สร้างฟังก์ชั่นในหน้าที่ include และ include หน้าเข้ามาก่อนการประมวลผล และทำการเรียกใช้ฟังก์ชั่นหลายๆครั้ง แทนครับ
  • ในการ include ไฟล์ เราควรระบุ PATH ของไฟล์แบบเต็มๆ จะทำให้ PHP ไม่ต้องเสียเวลาในการค้นหาไฟล์ครับ เช่น <?php include('C:\home\website\test.php');?> ซึ่งจะเร็วกว่าการระบุแบบ <?php include('test.php');?>