• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
reference یا همان & را بهتر بشناسید
#1
سلام،
در این تاپیک دوستان لطف کردن و با توضیحاتی در مورد رفرنس به من یاد دادند که این اصلاً چیه و چی کار می کنه. ولی اونروز من صفحه رو ذخیره کردم تا سر فرصت بخونم. متاسفانه بعد از خوندن صفحه بازم متوجه کار این رفرنس نشدم تا اینکه همین چند دقیقه پیش داشتم تمرین می کردم فهمیدم چی به چیه و میخوام شما هم بدونید. البته همه اینا که می خونید تجربه منه و شاید اشتباه کنم در اینصورت دوستان راهنمایی کنن.
& یا رفرنس چیست؟ من بهش میگم ارجاع دهنده. یعنی هرچی دریافت کنه ارجاع میده به یه چیز دیگه.
نکته اول: فقط و فقط متغیر ها هستند که میتونن به & ارسال بشن حتی نه! رشته ها!
کار رفرنس چیه؟ از تکرار جلوگیری می کنه. با توجه به نکته بالا ، دو تا متغیر هستند که مقدار یکسانی دارن. برای اینکه دومی رو دوباره عین اولی تعریف کنیم ، میام از رفرنس استفاده می کنم و بسیار آسوده مقدار اون متغیر اولی رو به دومی می سپاریم.
مثال: فرض کنید یک متغیر $name1 داریم با مقدار Alireza که میخوایم متغیر $name2 را برابر مقدار اون قرار بدیم. اونوقت داریم:
کد پی‌اچ‌پی:
function Change(&$name1){
$name1=’Alireza’;
}
Change($name2);
print 
$name2
خروجی که بدست میاد Alireza هست و چون ما متغیر $name2 را چاپ کردیم پس حتماً مقدار Alireza برای اون متغیر بوده دیگه!
نکته دوم: نیازی نیست حتماً متغیر دوم رو مثلاً $name2=’’; یا هر طور دیگه از پیش تعریف کنیم بلکه خود اون متغیر داخل فانکشن تعریف میشه.
به این مثال توجه کنید:
کد پی‌اچ‌پی:
function Change(&$value){ 
$value 'Alireza';
}
Change($var);
print 
$var;
$var 'Saeed';
print 
$var;
Change($var);
print 
$var
خروجی که بدست میاد AlirezaSaeedAlireza هست. چرا؟ چونکه اول ما متغیر $var رو داخل فانکشن بردیم و مقدارش شد Alireza بعد بیرون فانکشن یه مقدار بهش دادیم و شد Saeed و بعدش دوباره فرستادیم داخل فانکشن و شد Alireza .
توجه کنید: در مثال بالا دیدید که دفعه دوم متغیر $var دارای مقدار Saeed بود و ما دوباره فرستادیمش داخل فانکشن و مقدارش به Alireza تغییر کرد. از این نتیجه میگیریم که ما خود متغیر رو می فرستیم نه مقدارش رو. مقدارش اصلاً مهم نیست. و دوباره از این نتیجه میگیریم ، واسه همینه که نکته اول در رفرنس برقراره.
غایب
  پاسخ
تشکر شده توسط : Goback
#2
علیرضای عزیز خیلی پوزش می خوام
اما بگم که تو به شدت در مورد متغییر ها ، میدان دید و توابع دچار مشکلی و هنوز به درستی درکشون نکردی
بنظرم یه منبع مناسب رو مطالعه کن! Heart
  پاسخ
تشکر شده توسط : zoghal
#3
نقل قول:علیرضای عزیز خیلی پوزش می خوام
کسی (دست کم من) ناراحت نمیشه که دیگران بهش بخوان یه چیز بیشتر یاد بدن Heart
نقل قول:اما بگم که تو به شدت در مورد متغییر ها ، میدان دید و توابع دچار مشکلی و هنوز به درستی درکشون نکردی
از این تاپیک فهمیدی یا کلاً میگی؟ البته خودم آرایه ها رو هم میدونم خیلی مشکل دارم. واقعاً باید روی اینا کار کنم.
نقل قول:بنظرم یه منبع مناسب رو مطالعه کن!
خودت منبع مناسبی رو میشناسی؟
غایب
  پاسخ
تشکر شده توسط :
#4
نقل قول:کسی (دست کم من) ناراحت نمیشه که دیگران بهش بخوان یه چیز بیشتر یاد بدن
خیلی خوش حالم Blush

نقل قول:از این تاپیک فهمیدی یا کلاً میگی؟ البته خودم آرایه ها رو هم میدونم خیلی مشکل دارم. واقعاً باید روی اینا کار کنم.
توی این چند تای‍ینگ اخیر مشخصه که یکم نیاز به راهنمایی داری!

نقل قول:خودت منبع مناسبی رو میشناسی؟
هر کتاب خوبی راجع به برنامه نویسی خوبه لزوما چون مشکلت با چیزاییه که توی زبان های دیگه هم مشترکن
یا اصلا در کنار PHP یه کم با یه زبان دسکتاپ مخصوصا اگه از خانوتده C باشه مثه #C کار کن. کمک می کنه
و باز اگه منبع خوب اگه می خوار اگه من نه حسین هست Wink
  پاسخ
تشکر شده توسط :
#5
بهتر نبود اینو به این صورت تعریف میکردی ؟
کد:
function Change(&$var){

اینجا متغیر value چه نقشی داره ؟
  پاسخ
تشکر شده توسط :
#6
نقل قول:ینجا متغیر value چه نقشی داره ؟
value اینجا متغیر تابع هستش !
وقتی ما یه متغیر رو ( اینجا var ) به تابع میدیم در واقع مقدار اون رو به متغیر تابع ( یعنی value مساوی میشه با مقدار var ) میدیم !
پس حتما نباید هم نام باشن !
اما اینجا :
اینجا با استفاده از & ما داریم دقیقا خود متغیر ( var ) رو به تابع میدیم و متغیر تابع هر چی باشه فرقی نمیکنه !

در واقع به نظر من درست تر اینه که بگیم ما از value به عنوان یه اشاره گر استفاده میکنیم که به آدرس var اشاره میکنه ...
یعنی به خودی خود چیزی نداره . هر متغیری که به تابع میره value برابر با آدرس اون متغیر میشه !

چون این تاپیک با همین موضوعه یکم بحث رو باز تر کنم !
فرض کن متغیر var توی خونه 2016 حافظه باشه . حالا ما چی بگیم ( var=5 ) چی بگیم خونه 2016 برابر با 5 ! فرقی نمیکنه ...
ما با استفاده از رفرنس یه جورایی همون کار اشاره گر ها رو انجام میدیم .

ابته این برداشت منه ! منم منبع درست و حسابی نخوندم !
خوشحال میشم اساتید بهتر راهنمایی کنن و نظرشون رو راجع به توضیح من بگن !
  پاسخ
تشکر شده توسط : Padideh cyletech
#7
نقل قول:ابته این برداشت منه ! منم منبع درست و حسابی نخوندم !
من که مثال خونه بازیتو نفهمیدم ! Tongue ولی در کل حرفات درسته عزیزم. شاید کارش در جای دیگه فرق کنه یا اصلاً کار دیگه ای هم انجام بده. اینو دوستان بزرگوار لطف کنن یه توضیحی بدن. ممنون میشم Heart
غایب
  پاسخ
تشکر شده توسط :
#8
چرا قضیه رو می پی چونید.

رفرنس که در زبان های دیگر با ساختار سیستمی کمی متفاوت (در پی اچ پی )پوینتر pointer یا اشاره گر نام دارند.

داستان به این قرار هست که زمانی که شما متغیری تعریف می کنید. و مقدار دهی میکنید. درواقع دارید قسمتی از حافظه رو اشغال می کنید. به زبان ساده متغیر در واقع یک آدرس از خونه حافظه هست که که شما به کمک این آدرس به داده ها تون دسترسی پیدا میکنید.

حالا شما وقتی به صورت زیر عمل میکنید.
کد پی‌اچ‌پی:
<?php 
$varA 
'teest';
$varB = &$varA


هر دو متغیر رو خروجی بگیرید . یک مقدار دارند. و اگر هر کودم رو مقدار دهی کنید. او یکی متغیر هم تغییر می کنه. دلیلش هم اینه که $varB به $varA داره اشاره میکنه.
  پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان