require, include, require_once, include_once في PHP: شرح كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

require, include, require_once, include_once في PHP: أيهما تختار ولماذا هو مهم؟

\n\n

هل سبق لك أن تساءلت: "ما الفرق بين require و include في PHP؟ ولماذا تم اختراع النسخ _once؟" إذا كان الأمر كذلك، فأنت لست وحدك. هذا السؤال من بين الأكثر شيوعًا على Stack Overflow (آلاف المشاهدات وعشرات الأصوات). وهذا ليس من قبيل الصدفة.

\n\n

كل يوم، يستخدم آلاف مطوري PHP — من المبتدئين إلى المحترفين — هذه الدوال. لكن الكثيرين يستخدمونها بشكل تلقائي دون التفكير في العواقب. وهذا خطأ. فالاختيار الخاطئ قد يؤدي إلى أخطاء فادحة، أو تكرار في الكود، أو ما هو أسوأ، إلى أخطاء غير واضحة تظهر فقط على الخادم المباشر.

\n\n

اليوم، سنحسم الأمر مرة واحدة وإلى الأبد. سنشرح الفروقات بين require، include، require_once و include_once. ستتعلم ليس فقط النظري، بل وسترى أمثلة حية يمكنك تشغيلها فورًا. هيا بنا!

\n\n

1. الأساسيات: لماذا نضمّن الملفات؟

\n\n

قبل الحديث عن الاختلافات، دعنا نتذكر لماذا نفعل ذلك. في المشاريع الحقيقية، لا يُكتب كود PHP في ملف واحد ضخم. سيكون ذلك كابوسًا للصيانة. بدلاً من ذلك، يتم تقسيم الكود إلى وحدات:

\n\n
    \n
  • الإعدادات — config.php
  • \n
  • الدوال — functions.php
  • \n
  • القوالب — header.php، footer.php
  • \n
  • الكائنات — User.php، Database.php
  • \n
\n\n

وهنا تأتي الحاجة إلى require و include. فهي حرفيًا "تلصق" محتوى ملف داخل آخر. يعالج PHP الملف المُضمّن كما لو كان كوده مكتوبًا في هذا المكان تمامًا.

\n\n

2. require vs include: الفرق الرئيسي — رد الفعل على الخطأ

\n\n

هذه هي النقطة الأهم. احفظها مرة واحدة وإلى الأبد.

\n\n

include — تضمين مرن

\n\n

include يحاول تضمين الملف. إذا لم يكن الملف موجودًا أو حدث خطأ، يصدر PHP تحذيرًا (Warning)، لكنه يواصل تنفيذ السكريبت.

\n\n
<?php\n// include.php\necho "هذا هو include. ";\ninclude 'ملف_غير_موجود.php'; // سيصدر تحذيرًا\necho "السكريبت يواصل العمل!";\n?>\n
\n\n

النتيجة:

\n
هذا هو include. Warning: include(ملف_غير_موجود.php): failed to open stream...\nالسكريبت يواصل العمل!
\n\n

أرأيت؟ السكريبت لم يتوقف، بل استمر. هذا مفيد عندما يكون تضمين الملف اختياريًا. مثلاً، إذا كنت تضمّن أداة صغيرة غير ضرورية لعمل الصفحة.

\n\n

require — تضمين إلزامي

\n\n

require يفعل نفس الشيء، لكن مع اختلاف: إذا لم يتم العثور على الملف، يصدر PHP خطأ فادحًا (Fatal Error) و يوقف السكريبت فورًا.

\n\n
<?php\n// require.php\necho "هذا هو require. ";\nrequire 'ملف_غير_موجود.php'; // سيصدر خطأ فادحًا\necho "هذا الكود لن يُنفذ أبدًا!";\n?>\n
\n\n

النتيجة:

\n
هذا هو require. Fatal error: Uncaught Error: Failed opening required 'ملف_غير_موجود.php'...
\n\n

السكريبت مات. انتهى الأمر. لا مزيد من التنفيذ.

\n\n

متى تستخدم كلًا منهما؟

\n
    \n
  • require — للملفات الحيوية: إعدادات قاعدة البيانات، الكائنات الأساسية، الموجه (Router). إذا لم تكن موجودة، لا يمكن للموقع العمل.
  • \n
  • include — للكتل الاختيارية: القوالب، الأدوات الصغيرة، الإعلانات. إذا لم يتم تضمين الملف، ستظهر الصفحة بدون هذا الجزء.
  • \n
\n\n

3. require_once و include_once: الحماية من التكرار

\n\n

تخيل الآن هذا الموقف. لديك ملف config.php يُعرّف الثوابت والدوال. قم

المدونات

توصيات الكتب