include และ require ใช้อย่างไหนดี
คนเขียน PHP หลายคนคงงงกับความแตกต่างของฟังก์ชั่นเหล่านี้
เคล็ดลับสำหรับมือใหม่ เราสามารถส่งผ่านตัวแปรจากหน้าหนึ่งไปยังหน้าที่ถูก include เข้ามา รวมถึง ส่งตัวแปรจากหน้าที่ include เข้ามายังหน้าหลักได้ด้วย
โค้ดด้านบนเป็นไฟล์หลัก กำหนดตัวแปร $a ไว้ เท่ากับ 10 และ เราจะส่งตัวแปรนี้ไปประมวลผลที่ file2.php ซึ่งถูก include เข้ามา ซึ่งหลังจากประมวลผลไฟล์ file2.php แล้วก็จะนำค่าตัวแปร $a มาบวกกับ ตัวแปร $b ซึ่งถูกกำหนดใน file2.php
โค้ดใน file2.php ครับ ซึ่งแนวคิดง่ายๆของ include (หรือฟังก์ชั่นอื่นๆ ด้านบน) คือเหมือนประมวลผลด้วยไฟล์เดียวกัน
include และ require แตกต่างกันอย่างไร คำตอบให้ดูที่ชื่อมันเลยครับ ทั้ง 2 คำสั่งแต่ต่างกันแค่ สิ่งที่เกิดขึ้นหากไม่พบไฟล์ที่ต้องการ
ประเด็นเรื่องความเร็ว include และ require
จากการทดสอบ require จะทำงานได้เร็วกว่า include เล็กน้อย ซึ่งตามความเห็นของผม การใช้งานในแง่นี้ ผมแนะนำให้ดูที่จุดประสงค์ของไฟล์ที่ต้องการมากกว่า ส่วน ระหว่างที่มี once กับที่ไม่มี once คำสั่งที่มี once จะประมวลผล ช้ากว่าครับ เนื่องจากคำสั่งที่มี once จะต้องเสียเวลาในการตรวจสอบว่าไฟล์ถูกเรียกใช้งานแล้วหรือยัง ยกตัวอย่างเช่น การโหลด class ขนาดใหญ่
มีอีกประเด็นหนึ่งที่น่าสนใจ คือ หากเราจำเป็นต้อง include ไฟล์ขนาดใหญ่ และมีโอกาสที่จะ include มากกว่า 1 ครั้งแล้ว การใช้คำสั่งที่มี once จะทำงานเร็วกว่านะครับ เนื่องจาก การประมวลผลไฟล์ขนาดใหญ่ อาจใช้เวลามากกว่าการตรวจสอบว่าไฟล์ได้ถูกรวมเข้ามาหรือยัง
คำแนะนำในการเลือกใช้
- include
- inclue_once
- require
- require_once
เคล็ดลับสำหรับมือใหม่ เราสามารถส่งผ่านตัวแปรจากหน้าหนึ่งไปยังหน้าที่ถูก 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
ประเด็นเรื่องความเร็ว 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');?>