ก่อนอื่นต้องแยกระหว่าง require กับ include อย่าเพิ่งไปสนใจ once
ที่แน่ๆมันคือการเรียกไฟล์ เข้ามาทำงาน แต่ความแตกต่างระหว่าง include กับ require คือ priority หรือความสำคัญของไฟล์ที่เราเรียกเข้ามาทำงาน
- require คือถ้าไฟล์ไม่มีโปรแกรมหยุดทำงานทันที
- include คือถ้าไฟล์ไม่มีช่างหัวมันสคริปท์ทำงานต่อ
เพราะฉะนั้นเราสมควรใช้ require กับการเรียกไฟล์จำพวก function หรือ library ต่างๆ ที่หากไม่มีแล้วสคิรปท์ไม่สามารถทำงานได้อย่างถูกต้อง
ต่อไปมาดูที่ once ซึ่งจะเหมือนกันทั้ง include_once และ require_once
นั่นคือไฟล์ที่เราเรียกมาใช้งานนี้ต้องไม่ถูกเรียกมาก่อนหน้านี้
ทำมัยถึงต้อง once ?
บางไฟล์ที่เป็นไฟล์สำคัญๆ เช่น config.php ซึ่งประกาศตัวแปรที่จำเป้ฯต้องใช้ในระบบทั้งหมด หากในสคริปท์ส่วนที่หลังจากเรียกไฟล์ config.php เข้ามาำทำงานแล้ว มีการดำเนินการใดๆกับตัวแปรที่ถูกประกาศไว้ที่ไฟล์ config.php ซึ่งค่ามันเปลี่ยนแปลงไปแล้ว หลังจากตรงนี้ถ้าเราเรียกไฟล์ config.php กลับเข้ามาอีกจะทำให้ค่าของตัวแปรที่เปลี่ยนไปหลังจากเรียกทีแรก กลับมาเป็นค่าเดิมใน config.php ทำให้เกิดบั๊กขึ้นกับโปรแกรมได้
อีกกรณีพวก function หรือ class ต่างๆ จะสามารถประกาศได้เพียงหนึ่งครั้งเท่านั้น การประกาศ function หรือ class ซำ้ซ้อนถือเป็น fatal error โปรแกรมจะไม่ทำงานต่อไป เพราะฉะนั้นไฟล์ที่ประกาศ function หรือ class จะต้องใช้ _once ในการเรียก
การทำงานของ _once คือ เมื่อเจอ require_once หรือ include_once PHP จะเช็คก่อนว่าไฟล์นี้ถุกเรียกเข้ามาก่้อนหน้านี้รึยัง (ไม่ว่าจะเรียกเข้ามาด้วย require , include , require_once หรือ include_once) ถ้ามีแล้ว PHP จะไม่สนใจการเรียกครั้งนี้
<?php
require 'a.php'; // เรียกครั้งแรก
require_once 'a.php'; // เรียกครั้งนี้ PHP จะไม่สน เพราะถูกเรีัยกมาแล้ว
require 'a.php'; // เรียกครั้งนี้ PHP จะเรียกไฟล์นี้ขึ้นมา เพราะ PHP จะเช็คก็ต่อเมื่อการเรียกถูกกำกับด้วย _once เท่านั้น
ผมเลยใช้ require_once จนติดเป็นนิสัยไปแล้ว ส่วนการ include ผมจะใช้เฉพาะกับพวก template เท่านั้น เพราะถ้าบางส่วนของ template หายไปก็ให้แสดงหน้าเว็บเท่าที่มีออกไป
ประมาณนี้แหละครับ
สุดยอดมากเลยครับท่าน ของคุณสำหรับข้อมูล ผมก็สงสัยมานานแล้วเหมือนกัน
ถ้าจะพูดถึง php นี้ต้องถามคุณบอล และคุณ Ethaizone เลยครับ ไม่ผิดหวังแน่นอน
อีกคนหนึ่งก็คุณตี๋นะ แต่เขาไม่ค่อยจะได้เข้ามามั่งไม่ค่อยเห็น