في PHP، يتم الخلط بسهولة بين وظائف include و require. سأستخدم أدناه مثالًا كلاسيكيًا لتوضيح اختلافاتهم بعمق.
عندما نصل إلى قاعدة بيانات بشكل متكرر، يمكننا كتابة بيان الاتصال في ملف
con_db.php
<?php
$dbh = mysql_connect('localhost','','');
mysql_select_db('admreqs');
?>
في التطبيق الفعلي، يمكننا استدعاء هذا الملف في البرنامج.
على سبيل المثال، require("con_db.php") أو include("con_db.php)
، يكون تأثير الوظيفتين هو نفسه تقريبًا.
ولكن إذا كنت تستخدم
filename.php
<?php
هكذا
تتطلب ("con_db.php")
وظيفة myfun($par1,$par2)
{يحتوي على بيانات لمعالجة قاعدة البيانات}
.....
myfun($par1,$par2);
.....
myfun($p1,$p2);
?>
لا يمكن متابعة تنفيذ الملف عندما يصل إلى myfun، لأنه لا يمكن الحصول على المتغيرات الخارجية في الوظيفة (وينطبق الشيء نفسه على التضمين). ما لم يتم تمرير $dbh إلى الوظيفة كمتغير. وهذا يزيد من تعقيد وظائف الاستدعاء.
يمكننا حل هذه المشكلة عن طريق وضع الأمر require أو include داخل الوظيفة.
إذا تم استخدام التضمين، فسيتم تمرير استدعاء الوظيفة الأول للملف بسلاسة، ولكن لن يتم تنفيذ الاستدعاء الثاني والسبب هو أنه لا يمكن فتح قاعدة البيانات مرة أخرى دون إغلاقها. استبدل التضمين بالمطلوب وكل شيء على ما يرام.
بمعنى آخر، الطلب يشبه الفحص المسبق. عند تنفيذ البرنامج، سواء داخل الوظيفة أو خارجها، سيتم تنفيذ الملف المطلوب أولاً ولمرة واحدة فقط. وقم بتضمين استدعاء الملف في كل مرة يتم تنفيذه، أي أنه بعد هذا التنفيذ، في المرة التالية التي يتم فيها تنفيذه إلى هذه النقطة، سيتم تنفيذه مرة أخرى.
لذلك، إذا كانت هناك عبارات معينة في الحلقة التي تريد تنفيذها مرة واحدة فقط، فيمكنك فقط تضمينها مع require.