ที่มา
http://sarunya.smsintmkt.com/developer/index.php?option=com_content&task=view&id=3&Itemid=17

 ใน 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 ที่สร้างไว้
?>

Comment

Comment:

Tweet