ฟันธง! จะเลือกใช้อะไรดีระหว่าง 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
คุณอาจสนใจ
สแปมเมอร์รู้ว่าเปิดเมล์แล้ว
เว็บไทยดีดี (15,501 - 01 มี.ค. 51)
การใช้ภาพเป็น Background รวมกับแบบฟอร์มสำเร็จรูป
หมูขุน (30,008 - 04 ก.พ. 50)
การใช้รูปแบบตกแต่งตารางอัตโนมัติ
หมูขุน (48,781 - 17 มิ.ย. 51)
เจาะลึกการใช้ Symbolism Tool และ Data Driven Graphic กับงานพิมพ์ และงานเว็บ (ตอนจบ)
ธนิศา ไชยภูริพัฒน์ (32,397 - 19 ม.ค. 51)
เทคนิคการทำให้ Textbox รับค่าได้เฉพาะตัวเลข
Mr.GuruZ (59,626 - 03 มิ.ย. 49)
การทำให้เซลมีความกว้างพอดีกับข้อความ
หมูขุน (36,368 - 13 มิ.ย. 51)
การเปลี่ยนสีสไลด์โดยใช้เมนู Background
หมูขุน (21,060 - 04 ก.พ. 50)
มารู้จักการใช้งานฟีเจอร์ใหม่ๆ บน Adobe Photoshop CS (เวอร์ชัน 8) กันดีกว่า (ตอนที่ 2)
สุธีร์ นวกุล (40,143 - 06 ต.ค. 50)