آموزش رایگان PHP

تفاوت include، require، include_once و require_once در PHP

1م مرداد 1405 محراب حسن زاده
تفاوت include، require، include_once و require_once در PHP

یکی از بزرگ‌ترین مزیت‌های زبان برنامه نویسی PHP، قابلیت تقسیم‌بندی پروژه‌ها به فایل‌های کوچک‌تر و مدیریت آسان‌تر آن‌هاست. برای ضمیمه کردن یا وارد کردن یک فایل خارجی به داخل یک سند PHP، چهار دستور کلیدی وجود دارد: include، require، include_once و require_once. اگرچه هدف نهایی همه آن‌ها وارد کردن یک فایل است، اما تفاوت‌های بسیار حیاتی در نحوه برخورد با خطاها و مدیریت بارگذاری مجدد دارند که مستقیماً بر کارایی، امنیت و پایداری وب‌سایت شما تأثیر می‌گذارد.

۱. تفاوت اصلی include و require در چیست؟

بزرگ‌ترین و مهم‌ترین تفاوت بین این دو دستور، در نحوه مدیریت خطاها (Error Handling) هنگام عدم وجود فایل هدف یا رخ دادن مشکل در بارگذاری آن است:

  • دستور include: اگر مفسر PHP نتواند فایل مورد نظر را پیدا کند، یک خطای هشدار از نوع E_WARNING صادر می‌کند. با وجود این هشدار، اجرای کدهای برنامه متوقف نشده و بقیه کدهای صفحه تا انتها اجرا خواهند شد.
  • دستور require: اگر فایل هدف پیدا نشود، مفسر PHP یک خطای مهلک از نوع E_COMPILE_ERROR یا همان Fatal Error صادر کرده و بلافاصله اجرای کل اسکریپت را متوقف می‌کند.

مثال عملی برای include


include 'non_existent_file.php';
echo "این خط با وجود پیدا نشدن فایل بالا، همچنان چاپ خواهد شد!";

مثال عملی برای require


require 'non_existent_file.php';
// این خط هرگز اجرا نخواهد شد چون اسکریپت در خط قبل متوقف شده است.
echo "این خط هرگز چاپ نخواهد شد!";

۲. پسوندهای once چه تفاوتی ایجاد می‌کنند؟

زمانی که از واژه once (به معنی یک‌بار) در انتهای این دستورات استفاده می‌کنید (یعنی include_once و require_once)، رفتار مفسر PHP تغییر می‌کند. در این حالت، PHP ابتدا بررسی می‌کند که آیا فایل مورد نظر قبلاً در طول اجرای اسکریپت جاری ضمیمه شده است یا خیر.

اگر فایل از قبل ضمیمه شده باشد، مفسر از ضمیمه کردن مجدد آن خودداری می‌کند. این ویژگی به شدت در پروژه‌های بزرگ کاربرد دارد؛ زیرا از بروز خطاهای تداخل توابع یا کلاس‌های تکراری (Redeclare Errors) جلوگیری می‌کند.

مثال استفاده از require_once برای هدر و توابع


// فرض کنید فایل functions.php حاوی تعریف توابع اصلی است
require_once 'functions.php';
require_once 'functions.php'; // این خط نادیده گرفته می‌شود و خطایی رخ نمی‌دهد.

جدول مقایسه رفتاری توابع چهارگانه

دستور شدت خطا در صورت نبود فایل ادامه اجرای اسکریپت؟ کنترل بارگذاری مجدد؟
include E_WARNING (هشدار) بله خیر (مجدداً بارگذاری می‌کند)
require E_COMPILE_ERROR (خطای مهلک) خیر (متوقف می‌شود) خیر (مجدداً بارگذاری می‌کند)
include_once E_WARNING (هشدار) بله بله (فقط یک‌بار بارگذاری می‌کند)
require_once E_COMPILE_ERROR (خطای مهلک) خیر (متوقف می‌شود) بله (فقط یک‌بار بارگذاری می‌کند)

بهترین الگوها (Best Practices) بر اساس استانداردهای گوگل

بر اساس استانداردهای برنامه‌نویسی بهینه و سئوی تکنیکال وب‌سایت‌ها، خطاهای موجود در لایه بک‌اند نباید عملکرد کلی صفحه یا دسترسی کاربر را بدون دلیل مختل کنند، مگر اینکه آن منبع کاملاً حیاتی باشد:

  1. از require_once برای فایل‌های حیاتی سیستم استفاده کنید: فایل‌های پیکربندی دیتابیس (db.php)، تنظیمات امنیتی سیستم، کلاس‌های اصلی فریم‌ورک و فایل‌های تعریف توابع حتماً باید با require_once لود شوند. عدم وجود این فایل‌ها به معنی غیرقابل استفاده بودن برنامه است.
  2. از include برای بخش‌های نمایشی استفاده کنید: بخش‌هایی مانند بنرهای تبلیغاتی جانبی، بخش نظرات فرعی یا هر ویجتی که عدم لود شدنش به کل سایت آسیب نمی‌زند را با include یا include_once لود کنید تا در صورت بروز خطا، حداقل بقیه ساختار سایت برای کاربر و خزنده‌های گوگل نمایش داده شود.
  3. تاثیر بر پرفورمنس: استفاده بیش از حد از توابع با پسوند once سربار پردازشی کمی دارد زیرا PHP باید هربار لیست فایل‌های ضمیمه‌شده را چک کند. اگرچه در سیستم‌های مدرن این تفاوت ناچیز است، اما طراحی معماری تمیز و استفاده درست از Autoloaderها بهترین رویکرد استاندارد است.

پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی
28م آذر 1404

درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی

مطالعه بیشتر
آموزش ساخت افکت تصویر با تم اینستاگرام و انیمیشن چرخش دوره‌ای در CSS
13م خرداد 1405

آموزش ساخت افکت تصویر با تم اینستاگرام و انیمیشن چرخش دوره‌ای در CSS

مطالعه بیشتر
آموزش استفاده از box-shadow و text-shadow در CSS: ایجاد سایه‌های زیبا و جذاب
11م آبان 1403

آموزش استفاده از box-shadow و text-shadow در CSS: ایجاد سایه‌های زیبا و جذاب

مطالعه بیشتر
آموزش جامع انواع داده‌ها در PHP (بخش اول: String, Integer, Float, Boolean)
24م خرداد 1405

آموزش جامع انواع داده‌ها در PHP (بخش اول: String, Integer, Float, Boolean)

مطالعه بیشتر
اصول پایه React.js: آشنایی با کامپوننت‌ها، وضعیت و رندرینگ
28م شهریور 1402

اصول پایه React.js: آشنایی با کامپوننت‌ها، وضعیت و رندرینگ

مطالعه بیشتر
مقدمه‌ای بر CSS و نحوه اضافه کردن آن به HTML: راهنمای ساده و کامل برای مبتدیان
4م شهریور 1402

مقدمه‌ای بر CSS و نحوه اضافه کردن آن به HTML: راهنمای ساده و کامل برای مبتدیان

مطالعه بیشتر
آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع
5م شهریور 1402

آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع

مطالعه بیشتر
آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی
2م آبان 1403

آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی

مطالعه بیشتر
تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل
1م مرداد 1405

تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل

مطالعه بیشتر
آموزش استفاده از object-fit و object-position در CSS: تنظیم و قرارگیری تصاویر به‌صورت دقیق
12م آبان 1403

آموزش استفاده از object-fit و object-position در CSS: تنظیم و قرارگیری تصاویر به‌صورت دقیق

مطالعه بیشتر
آموزش جامع حلقه‌های for و while در جاوا اسکریپت: نحوه استفاده و کاربردها
2م بهمن 1402

آموزش جامع حلقه‌های for و while در جاوا اسکریپت: نحوه استفاده و کاربردها

مطالعه بیشتر
آموزش رویدادهای پیشرفته در جاوا اسکریپت: بابلینگ، کپچرینگ و توقف پیش‌فرض - راهنمای جامع
2م آبان 1403

آموزش رویدادهای پیشرفته در جاوا اسکریپت: بابلینگ، کپچرینگ و توقف پیش‌فرض - راهنمای جامع

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد