PDA

View Full Version : تفاوت چند تا دستور



Tarragon
چهارشنبه 06 اردیبهشت 1391, 11:38 صبح
سلام می خواستم بدونم تفاوت دستور های


iclude
include_once
require
require_once
در چیه ؟
با تشکر

soroush.r70
چهارشنبه 06 اردیبهشت 1391, 11:54 صبح
include برای قراردادن بخشی از سایت مثلا قرار دادن بخش فوتر در یک فایل جدا به نام footer.php و فراخوانی آن در سایت به صورت
include("footer.php"); فرق include_once با include اینه که اون میاد اول بررسی می کنه که قبلا این فایل فراخوانی شده یا نه

include و include_once برای فراخوانی بخش های وب سایت که اگه یه قسمت فراخوانی نشه مشکلی برای وب سایت پیش نمی آید

require و require_once برای فراخوانی قسمت های مهم وب سایت که در صورتی که این فایل ها نباشند قالبا وب سایت کار نمی کند مانند فراخوانی اطلاعات دیتابیس _ require_once هم بررسی می کند که آیا قبلا فراخوانی شده یا نه.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 12:03 عصر
همه این دستورات برای ضمیمه کردن یک فایل دیگه به کار میرن ولی تفاوتهای جزئی با هم دارن:
include : سعی در ضمیمه کردن فایل میکنه ولی اگه به هر دلیلی نتونست‌ (آدرس اشتباه بود، فایل در دسترس نبود و...) یک هشدار (E_WARNING) تولید میکنه و بقیه اسکریپت صفحه اجرا میشه. بنابراین معمولاً از این دستور برای بارگذاری کدهای جانبی سایت (مثل اسکریپت نمایش وضعیت آب و هوا و...) استفاده میشه تا اگه فایل ضمیمه نشد، بقیه سایت از کار نیفته.
require : فایل رو ضمیمه میکنه و اگه نتونست، یک خطا (E_ERROR) تولید میکنه و بقیه اسکریپت دیگه کار نمیکنه. لذا از این دستور معمولاً برای ضمیمه کردن فایلهای ضروری سایت مثل تعریف کلاسها و config و... استفاده میشه که نبودن اونها موجب از کار افتادن بقیه بخشها میشه. درنتیجه اگه نشه اونها رو ضمیمه کنیم، نباید بقیه اسکریپت اجرا بشه و با پیغام خطا، اجرای اسکریپت متوقف بشه و بعداً پشتیبانی با بررسی خطای مربوطه، مشکل رو رفع کنه.
include_one و require_once : مثل نسخه بدون once_ خودشون عمل میکنن با این تفاوت که اگه فایل قبلاً ضمیمه شده باشه، دوباره اون رو ضمیمه نمیکنن. بعضی وقتها اسکریپتهایی که ضمیمه میشن، خودشون یکسری اسکریپت دیگه رو ضمیمه میکنن و ممکنه در چنین شرایطی، یک اسکریپت چند بار توسط فایلهای مختلف در یکبار فراخوانی ضمیمه بشه. مثال:


// index.php
require 'config.php';
require 'db.ph';
// db.php
require 'config.php';

خوب اینجا میبینید که عملاً موقع فراخوانی فایل index.php، فایل config.php دوبار داره ضمیمه میشه (یکبار مستقیماً توسط index.php و دفعه بعد توسط db.php)
در مواردی که فایلی که چند بار ضمیمه شده، فقط چندتا متغیر معمولی تعریف کرده باشه، مشکلی پیش نمیاد ولی اگه این فایل اقدام به تعریف ثابت (دستور define) یا کلاس و تابع و... بکنه، ضمیمه شدن مجدد به معنای تعریف مجدد این ثابتها، کلاسها و یا توابع هست که درنتیجه با پیغام خطای Duplicate Definition Error مواجه میشیم. برای رفع این مشکل، باید کد رو اینطوری اصلاح کنیم:


// index.php
require 'config.php';
require 'db.php';
// db.php
require_once 'db.php';

اینطوری فایل db.php فقط فایل config.php رو درصورتی ضمیمه میکنه که قبلاً (توسط اسکریپتی که خود db.php رو ضمیمه میکنه) ضمیمه نشده باشه. خوب شاید بگیم بهتره همیشه از include_once و require_once استفاده بشه اما در اصل، پیشنهاد میشه زمانی که مطمئن هستین یک فایل قبلاً ضمیمه نشده (مثل ضمیمه شدن config.php توی index.php در مثال فوق که مطمئن هستیم قبلاً این کار انجام نشده چون خود index.php رو جایی ضمیمه نکردیم)، یا اینکه ضمیمه شدن مجدد مشکلی ایجاد نمیکنه (فایل مربوطه، فقط چندتا متغیر تعریف کرده)، از include یا require معمولی استفاده کنید چون سرعتشون بالاتره (بخاطر اینکه چک نمیکنن ببینن قبلاً ضمیمه شده یا نه).
امیدوارم خوب توضیح داده باشم.
موفق باشید.
//