ฟันธง! จะเลือกใช้อะไรดีระหว่าง include(), include_once(), require() และ require_once() จัดทำโดย : อ้ายคำปัน
    ใน PHP จะมีฟังก์ชันที่ทำหน้าที่สำหรับนำเข้าไฟล์ (นำไฟลหนึ่งมาเป็นส่วนประกอบของอีกไฟล์หนึ่ง) อยู่หลายฟังก์ชันด้วยกัน แต่ที่มีคนนิยมใช้มากและพบเห็นได้บ่อย (ตามบทความหรือฟรี source code ทั่วไป) จะมีอยู่ประมาณ 4 ฟังก์ชัน ซึ่งก็มีหลายคน งงว่าจะเลือกใช้อะไรดี เพราะใช้ ๆ ไปผลลัพธ์มันก็เหมือน ๆ กัน ในบทความนี้เราจะมาฟันธงกันครับว่าควรจะใช้อะไรดี
   ซึ่ง 4 ฟังก์ชันที่ผมพูดถึง ได้แก่
   1.
include เช่น incude("connect.inc") หรือ include "connect.inc"
   2.
include_once เช่น include_once("connect.inc") หรือ include_once "connect.inc"
   3.
require เช่น require("connect.inc") หรือ require "connect.inc"
   4.
require_once เช่น require("conect.inc") หรือ require_once "connect.inc"

(***comment สำหรับมือใหม่นิดหนึ่งนะครับ ...ไม่จำกัดว่าต้องเป็นไฟล์นามสกุล *.inc นะครับ นามสกุลอะไรก็ได้ หรือจะเป็น url ก็ได้
แต่นักเขียนโปรแกรมส่วนมากจะนิยมตั้งเป็น
*.inc หรือ *.inc.php เพื่อให้สังเกตได้ง่ายว่าไฟล์นามสกุลแบบนี้จะต้อง ถูกเรียกใช้โดยไฟล์อื่น ประมาณนั้นครับ ^^)

   จะสังเกตเห็นว่ารูปแบบของการเรียกใช้งานไม่ได้ต่างกันเลย แต่ความจริงมันต่างกันครับ แล้วมันต่างกันยังไงละ ^^
....ก่อนจะรู้ว่ามันต่างกันยังไงเรามาดูที่ศัพท์ภาษาอังกฤษกันก่อนนะครับ ในชื่อฟังก์ชันทั้ง 4 ฟังก์ชันนั้นจะมีศัพท์ภาษาอังกฤษหลัก ๆ อยู่ 3 คำ
คือ
"include", "require" และ "once" ลองเปิดโปรแกรม dictionary ที่มีอยู่ ในเครื่องคุณดูสิครับว่าแต่ละคำหมายความว่าอะไร
   ความหมายที่ได้จะประมาณนี้ครับ
   
include = รวมถึง, ประกอบด้วย
  
 require = ต้องการ
   
once = ครั้งเดียว, หนเดียว

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


...มาลองทดสอบกันดูนะครับ คุณลองสร้างไฟล์ php ขึ้นมา 2 ไฟล์
ไฟล์แรกเขียนสคริปต์นี้ลงไปครับ

<?
   include("abcdefghijk.php"); //หมายถึงชื่อไฟล์ที่ไม่มีอยู่จริงหนะครับ ^^
?>

ไฟล์ที่สองเขียนสคริปต์นี้ลงไปครับ
<?
   require("hijklmnop.php"); //เป็นชื่อไฟล์ที่ไม่มีอยู่จริงเช่นกันครับ - -"
?>
ลองสังดูความแตกต่างเอาเองนะครับ

....อย่าเพิ่งปิดบทความนี้นะครับ ยังไม่จบครับ ^^ ผมยังไม่ได้บอกคุณเลยว่า
มี once กับ ไม่มี once มันแตกต่างกันยังไง ^^
   มี once กับ ไม่มี once จะรายงาน error เหมือนกันครับตามที่บอกไว้แล้วข้างต้น แต่มันต่างกันตรงที่การเรียกใช้ครับ ขอยกตัวอย่าง
เป็น
require ก็แล้วกันนะครับ เช่นในเว็ปเพจหน้าหนึ่งผมใช้ require("test.php") 5 ครั้ง ไฟล์ test.php ก็จะถูกนำเข้ามา
โดยความสำคัญแบบ
require ถึง 5 ครั้งเลยครับ แต่ถ้าผมเรียก require_once("test.php") 5 ครั้ง ไฟล์ test.php
จะถูกนำเข้ามาโดยความสำคัญแบบ
require แค่ครั้งเดียวครับ(ชื่อมันก็บอกอยู่แล้ว - -" ตามความหมายที่อธิบายไว้ข้างต้น)

เรามาทดสอบตัวอย่างจริงกันเลยดีกว่าครับ ผมขอยกตัวอย่างแค่
require นะครับเพราะสำคัญมากกว่า ^^ ส่วน include
นั้นไปลองดูเองนะครับ
ขั้นแรก ให้คุณสร้างไฟล์
test.php โดยเขียนสคริปต์ดังนี้
<?
#test.php
echo "ถูกนำเข้าครั้งที่ $i <br>";
?>

ขั้นที่สอง สร้างไฟล์ php ขึ้นมาอีก 2 ไฟล์ โดยไฟล์แรกเขียนสคริปต์ดังนี้
<?
#require.php
for($i=1;$i<=5;$i++)
   require("test.php"); //นำเข้าไฟล์ test.php ที่สร้างไว้
?>
ไฟล์ที่สองเขียนสคริปต์ดังนี้
<?
#require_once.php
for($i=1;$i<=5;$i++)
   require_once(
"test.php"); //นำเข้าไฟล์ test.php ที่สร้างไว้
?>
ลองรันแล้วสังเกตความแตกต่างระหว่างผลลัพธ์จากทั้งสองไฟล์ดูนะครับ หวังว่าคงเข้าใจ ^^

...จบจริง ๆ แล้วนะครับ ^^... เป็นยังไงบ้างครับหายข้อสงสัยกันหรือยังครับ

----------------------------------------------------------------------------------------------------------------------------------

   ทิ้งท้าย..."Knowledge resides in the users and not in the collection. ความรู้อยู่ในตัวผู้เรียนมิได้อยู่ในแหล่งความรู้"

...เป็นกำลังใจให้ webthaidd.com สร้างสรรค์งานดี ๆ เพื่อสังคมอย่างนี้ตลอดไปครับ ^O^


ผู้จัดทำ : วิวัฒน์ มณีจันสุข
ที่อยู่อีเมลล์ :
winnerww@hotmail.com
website : http://computerpsycho.boxchart.com
คุณอาจสนใจ
วิธีแฮกล็อกออนพาสเวิร์ดของวินโดวส์แบบง่าย ๆ
เว็บไทยดีดี (28,479 - 29 ก.ย. 50)
แปลง VCD Karaoke เป็น MP3
เว็บไทยดีดี (17,755 - 22 ม.ค. 51)
ล้วงลึกเทคโนโลยี Hyper - Threading Technology (HT Technology)
เว็บไทยดีดี (14,788 - 29 ก.ย. 50)
การสร้าง New เมือมีคนตั้งกระทู้ ตอนที่ 7
Mr.GuruZ (32,863 - 03 มิ.ย. 49)
การคัดลอกชีททั้งหน้้า
หมูขุน (39,716 - 14 มิ.ย. 51)
การสร้าง animation จาก Image Ready ตอน 2
ดินสอ (107,362 - 05 ต.ค. 49)
การเขียน โปรแกรมสร้าง Link List ด้วยภาษา C
langjuko (55,640 - 19 ก.ย. 51)
การทำ Staircase Effect
Black-Hawk (118,770 - 11 ก.พ. 51)