include,include_once, require, require_once มันต่างกันยังไง

By -

include,  include_once, require,  require_once มันคืออะไร  มันต่างกันยังไง
เอาละ…ก่อนจะรู้ว่ามันต่างกันยังไง (ผมขอไปเปิด  dictionary  ดูก่อนว่าความหมายมันคืออะไร อิอิ ) … เรามาดูที่ศัพท์ภาษาอังกฤษกันก่อนนะครับ ในชื่อฟังก์ชันทั้ง 4 ฟังก์ชันนั้นจะมีศัพท์ภาษาอังกฤษหลัก ๆ อยู่ 3 คำ
คือ “include“, “require” และ “once
ความหมายที่ได้จะประมาณนี้ครับ
include = รวมถึง, ประกอบด้วย
require = ต้องการ
once = ครั้งเดียว, หนเดียว

ถ้าเราสังเกตุดูจากคำแปลก็น่าจะรู้แล้วหล่ะว่าไอ้ฟังก์ชันไหนให้ความสำคัญกับไฟล์ที่นำเข้ามามากกว่ากัน
สรุปก็ได้ดังนี้ครับ
ฟังก์ชัน include() กับ include_once() เมื่อใช้แล้ว ถ้ามันไม่เจอไฟล์ตามที่ระบุ มันจะรายงาน error แค่
Warning เท่านั้นแล้วก็ข้ามไปส่วนอื่นต่อได้ จึงนิยมใช้เรียกไฟล์พวกข้อความ หรือ html ธรรมดา เพราะไม่ค่อยจำเป็นเท่า
ไหร่โปรแกรมยังสามารถข้ามไปทำงานส่วนอื่นต่อได้อีก ยังไม่สมควารต้องหยุด
ต่างกันกับ require() กับ require_once() ซึ่งถ้าไม่เจอไฟล์ตามที่ระบุแล้ว มันจะรายงาน error มาเป็น Final error ทันที
แล้วก็จะโปรแกรมก็จะหยุดแค่ตรงนั้น จีงนิยมใช้เรียกไฟล์ที่เก็บฟังก์ชัน, คลาส หรือค่า config ต่าง ๆ ที่มีความจำเป็นมาก เพราะถ้าข้าม
การเรียกไฟล์ส่วนนี้ไปผลลัพธ์ส่วนอื่นที่ถึงแม้รันออกมาได้ก็ไร้ค่า

เรามาลองดูกันดีกว่า ว่ามัน แสดงผลออกมาอย่างไร

include("include_file.php");

include_file.php นี้ไม่มีนะครับแค่สมมุติขึ้นมาเท่านั้น จะแสดงข้อผิดพลาดขึ้นมาว่า

Warning: include(include_file.php) [function.include]: failed to open stream: No such file or directory in C:\AppServ\www\Tdiv\PHP\include.php on line 20;

ไฟล์ที่สองเขียนสคริปต์นี้ลงไปครับ

  require("require_file.php");

require_file.php ไฟล์นี้ก็ไม่มีอยู่อีกนะแหล่ะครับ เราต้องการให้มันแสดง ข้อผิดพลาดของสองตัวนี้ออกมา เลยสมมุติชื่อไฟล์ที่เราไม่ได้สร้างขึ้น จะแสดงข้อผิดพลาดขึ้นมาว่า

Fatal error: require() [function.require]: Failed opening required ‘require_file.php’ (include_path=’.;C:\php5\pear’) in C:\AppServ\www\Tdiv\PHP\include.php on line 29

อ้าว ยังเลือก ไอ้คำว่า once อีกตัวนี่นา แล้วไอ้ที่มี once  กับ ไม่มี once มันแตกต่างกันยังไง
มี once กับ ไม่มี once จะรายงาน error เหมือนกันกับข้างบนเด๊ะ  แต่มันต่างกันตรงที่การเรียกใช้
เช่น ในหน้า index.php ผมเรียกใช้  require(“connect.php”); (หรือจะเป็น include ก็ได้แล้วแต่ความต้องการ แต่ว่าไฟล์นี้เป็นไฟล์ เกี่ยวกับ connect database ผมจึงเลือกใช้ฟังชั่น require เพราะถ้ามันไม่นำไฟล์เข้ามา บรรทัดถัดไปต่อให้ทำงานก็ไม่มีประโยชน์อยู่ดี ) แต่ผมใช้  3 ครั้ง
ไฟล์ connect.php ก็จะถูกนำเข้ามาโดยความสำคัญแบบ require ถึง 3 ครั้งเลยครับ แต่ถ้าผมเรียก require_once(“connect.php”) 3ครั้ง หรือมากกว่านั้นก็แล้วแต่  ไฟล์ connect.php จะถูกนำเข้ามาโดยความสำคัญแบบ require แค่ครั้งเดียวโดยที่ไม่สนใจเลยว่าจะมีการเรียกกี่ครั้ง (ก็ once มันบ่งบอกอยู่แล้ว ตามความหมายภาษาปะกิตเลย)

mitsumasa