سئوال درباره تابع Require و include

khoshhalamir

New Member
سلام . خسته نباشید . می شه بگید که کار تابع Require چی هست ؟ وچه فرقی بین این تابع و Require_once است در کل _Once در تابع Requireو Include برای چی هست ؟ و قرار دادن کاراکتر @ قبل از Require و Include برای چی هست ؟ ممنون
 

jhoseini

Member
تا جایی که کیدونم فرقی بین require و include نیست
ولی فرق require_once با require اینه که اگه با require_once دو بار یه فایل با یه آدرس رو ضمیمه کنید دفه ی دوم انجام نمیشه ولی اگه اینارو با require انجام بدید انجام میشه و احتمالا یه پیغام خطا هم ایجاد میشه (اگه داخل فایل تعریف تابع داشته باشیم)

علامت @ نمایش خطا رو off میکنه، و معمولاً وقتی برنامه نویس خطای احتمالی برای یه تابع رو پیشبینی میکنه این کارکتر رو پشتش میزاده که کاربر خطایی نبینه
PHP:
if(! @ $fp=fopen('file.txt','r'){
  ;// do some thing
}
اینجا اگه فایلی به اسم file.txt درکار نباشه مسلماً باید fopen خطا بده، اما به خاطر @ مرام میزاره، چیزی نمیگه !
 
آخرین ویرایش:
  • Like
Reactions: SME

peyman1987

Member
دوست عزیزمون کاملا درست میفرماین. ولی بین require و include یه تفاوت جزئی هست. اگر از require استفاده کنین و فایل مورد نظر وجود نداشته باشه ادامه اسکریپت اجرا نمیشه و خطا روی صفحه نمایش داده میشه ولی اگه از include استفاده کنین و فایل مورد نظر وجود نداشته باشه خطا ظاهر میشه ولی ادامه اسکریپت هم اجرا میشه.

در ضمن باید بگم که از این توابع برای استفاده از محتوای فایلهای دیگه استفاده میشه. اگه قبلا برنامه نویسی application کرده باشین این توابع مثل تابع USES توی پاسکال و INCLUDE توی C همل میکنن. یعنی محتوای فایل مورد نظر رو در همون محل فراخوانی کپی میکنن. مثلا :

صفحه a.php
PHP:
REQUIRE("b.php");
PRINT($intNumber);

صفحه b.php
PHP:
$intNumber = 10;

با اجرای فایل a.php خروجی میشه 10.
 
آخرین ویرایش:

Khashayar581

New Member
یه فرق دیگه هم بین این دوتا هست.
از Require هر جا که استفاده کنی فایل رو import می کنه، در صورتیکه include اینطور نیست.برای مثال اگر از Require توی یک بلوک if استفاده کنی که شرط if غلط باشه و اصلا وارد بلوک ifنشه ولی باز هم Require داخل بلوک بکار رفته import میشه.
 

tabib_m

Member
یه فرق دیگه هم بین این دوتا هست.
از Require هر جا که استفاده کنی فایل رو import می کنه، در صورتیکه include اینطور نیست.برای مثال اگر از Require توی یک بلوک if استفاده کنی که شرط if غلط باشه و اصلا وارد بلوک ifنشه ولی باز هم Require داخل بلوک بکار رفته import میشه.
مطمئنی؟ میتونی منبع حرفت رو بگی؟
چه دلیلی میتونه وجود داشته باشه که یک سری کد در جایی فراخوانی بشن که هیچ وقت قرار نیست اجرا بشن؟؟؟ (مثل همون مثالی که زدی)
از طرفی هم این قضیه خلاف قوانین برنامه نویسی هست! منظورم اینه که مادامی که جواب شرط داخل if برابر با false باشه، هیچ دستوری داخل بلاک if نباید اجرا بشه!!

یا مثلا اگر قرار باشه من require رو داخل یک تابع استفاده کنم و هیچ وقت اون تابع رو فراخوانی نکنم، با این حال require عمل میکنه؟؟؟ فکر نمیکنم اصلا معقول باشه!!
 

Khashayar581

New Member
این هم یکی از منابع که البته سوال شما مورد اول بود. -> کتاب (Apress) Beginning PHP & MySQL 5 From Novice to Professional, 2nd Edition - Jan.2006 - صفحه 88:



There are two important differences between
require() and include(). First, the file will
be included in the script in which the require() construct appears, regardless of where require()
is located. For instance, if


require() were placed within an if statement that evaluated to false,
the file would be included anyway!
The second important difference is that script execution will stop if a​
require() fails, whereas
it may continue in the case of an
include(). One possible explanation for the failure of a

require() statement is an incorrectly referenced target path.

 

peyman1987

Member
این هم یکی از منابع که البته سوال شما مورد اول بود. -> کتاب (Apress) Beginning PHP & MySQL 5 From Novice to Professional, 2nd Edition - Jan.2006 - صفحه 88:



There are two important differences between
require() and include(). First, the file will
be included in the script in which the require() construct appears, regardless of where require()
is located. For instance, if


require() were placed within an if statement that evaluated to false,
the file would be included anyway!
The second important difference is that script execution will stop if a​
require() fails, whereas
it may continue in the case of an
include(). One possible explanation for the failure of a

require() statement is an incorrectly referenced target path.

دوست عزیز این متن رو از کدوم منبع ذکر کردین؟؟؟:shock: فکر نمیکنم کتابهای APressهمچین سوتی بدن.
حرفش کاملا اشتباهه. همونطور که طبیب جان گفتن این حرف بی معنیه. من امتحانش هم کردم صحت نداره.
 

Khashayar581

New Member
اسم کتاب رو که گفتم:
Apress - Beginning PHP & MySQL 5 From Novice to Professional, 2nd Edition - Jan.2006
باور ندارین خودتون یه نگاهی به کتابش بندازین. صفحه 88 آخرین پاراگراف.
دیگه راست و دروغش پای نویسنده کتاب.
 

Khashayar581

New Member
پیمان جان این رو هم از php.net پیدا کردم:

Note: Prior to PHP 4.0.2, the following applies: require() will always attempt to read the target file, even if the line it's on never executes. The conditional statement won't affect require(). However, if the line on which the require() occurs is not executed, neither will any of the code in the target file be executed. Similarly, looping structures do not affect the behaviour of require(). Although the code contained in the target file is still subject to the loop, the require() itself happens only once


دیدی بنده خدا سوتی نداده. فکر کنم شما سوتی دادی :)
 

peyman1987

Member
عزیزم کتاب و وب سایت که هیچی اگه خود نویسنده PHP هم یه حرفی رو بزنه من بدون امتحان قبولش نمیکنم.
الان هم امتحان میکنم میبینم این حرفی که زده میشه درست نیست. مگر اینکه منظور چیز دیگه ای باشه. خودتون میتونین کد زیر رو بنویسین و تست کنین.
PHP:
<?PHP
if(2==1)
require('a.php');
?>

اگه این حرف درست باشه باید خطا بده چون فایلی به اسم a.php وجود نداره که include بشه ولی خطایی در کار نیست.
 

Khashayar581

New Member
شما مثل اینکه اصلا پست ها رو نمی خونین.
Prior to PHP 4.0.2, the following applies

حالا حتما شما داری این کد رو با نسخه بالاتر از 4.0.2 تست می کنی.
 

peyman1987

Member
نخیر دوست عزیز بنده پستها رو میخونم.

هم توی Php5 و هم توی Php4.0 این رو تست کردم جواب فرقی نمیکنه.

موفق باشی
 

tabib_m

Member
اگه این حرف درست باشه باید خطا بده چون فایلی به اسم a.php وجود نداره که include بشه ولی خطایی در کار نیست.
عدم نمایش ارور، دلیلی بر عدم اجرای کد مربوطه نیست. میتونه کد اجرا بشه (با خطا هم مواجه بشه) ولی php ارور مربوطه رو echo نکنه! (چون شرط داخل if برقرار نیست!) در هر صورت، به این راحتیا نمیشه تستی کرد که از این مسئله مطمئن شد!
مسئله اینجاس که خود php داره این حرف رو میزنه.

ولی در کل، همین که در اون موقع (php 4.0.2) هم این کار انجام میشده، من تعجب میکنم! (به خاطر دلایل مذکور) ولی همین که این مسئله برداشته شده، نشونگر بی معنی بودنش هست! :)

در هر صورت ممنون :)
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا