ใน PHP ฟังก์ชั่นของ include และ need นั้นสับสนได้ง่าย ด้านล่างนี้ ฉันจะใช้ตัวอย่างคลาสสิกเพื่ออธิบายความแตกต่างอย่างลึกซึ้ง
เมื่อเราเข้าถึงฐานข้อมูลบ่อยครั้ง เราสามารถเขียนคำสั่งการเชื่อมต่อลงในไฟล์
con_db.php
<?php
$dbh = mysql_connect('localhost','','');
mysql_select_db('admreqs');
?>
ในการใช้งานจริงเราสามารถเรียกไฟล์นี้ในโปรแกรมได้
เช่น need("con_db.php") หรือ include("con_db.php)
ผลของทั้ง 2 ฟังก์ชั่นจะใกล้เคียงกัน
แต่ถ้าคุณใช้
filename.php
<?php
แบบนี้
ต้องการ("con_db.php")
ฟังก์ชั่น myfun($par1,$par2)
{มีคำสั่งสำหรับการประมวลผลฐานข้อมูล}
-
myfun($พาร์1,$พาร์2);
-
myfun($p1,$p2);
?>
ไฟล์ไม่สามารถดำเนินการต่อไปได้เมื่อถึง myfun เนื่องจากไม่สามารถรับตัวแปรภายนอกในฟังก์ชันได้ (เช่นเดียวกับกรณีรวม) เว้นแต่ $dbh จะถูกส่งผ่านไปยังฟังก์ชันเป็นตัวแปร สิ่งนี้จะเพิ่มความซับซ้อนของการเรียกใช้ฟังก์ชัน
เราสามารถแก้ไขปัญหานี้ได้โดยการใส่ need หรือ include เข้าไปในฟังก์ชัน
หากใช้การรวม การเรียกฟังก์ชันแรกของไฟล์จะผ่านไปอย่างราบรื่น แต่การเรียกครั้งที่สองจะไม่ถูกดำเนินการ เหตุผลก็คือ ไม่สามารถเปิดฐานข้อมูลอีกครั้งโดยไม่ปิดมัน หรืออีกนัยหนึ่งคือ con_db.php จะถูกดำเนินการสองครั้ง แทนที่รวมด้วย need และทุกอย่างเรียบร้อยดี
กล่าวอีกนัยหนึ่ง need จะคล้ายกับการสแกนล่วงหน้า เมื่อโปรแกรมถูกเรียกใช้งาน ไม่ว่าจะเป็นภายในหรือภายนอกฟังก์ชัน ไฟล์ need จะถูกดำเนินการในครั้งแรกและเพียงครั้งเดียว และรวมการเรียกไฟล์ทุกครั้งที่ถูกดำเนินการ นั่นคือ หลังจากดำเนินการนี้ ครั้งถัดไปที่ถูกดำเนินการจนถึงจุดนี้ก็จะถูกดำเนินการอีกครั้ง
ดังนั้น หากมีคำสั่งบางคำสั่งในลูปที่คุณต้องการดำเนินการเพียงครั้งเดียว คุณก็สามารถรวมคำสั่งเหล่านั้นเข้ากับคำสั่ง need ได้