PDA

View Full Version : معنی &$value



morteza_naderloo
یک شنبه 05 خرداد 1392, 20:32 عصر
با سلام
دوستان معنی این کد چیه !؟


&$value

منظور بنده این است که این کاراکتر ( & ) قبل از متغیرها و توابع چیست ؟!

MostafaEs3
یک شنبه 05 خرداد 1392, 20:50 عصر
زمانی که شما (مثلا در توابع) از این کاراکتر استفاده کنید ، تغییرات مستقیما در متغیری انجام میشه که ارسال شده. به این مثال دقت کنید ::


function test(&$var) {
$var = 'test test test test test test test';
}

$myvar = '';
test ($myvar);

echo $myvar

در اصل با قرار گرفتن این کاراکتر ، (متغیر) ارسال میشه نه (مقدار متغیر) - همونطور که دیدید ما متغیر myvar رو به تابع test فرستادیم و بدون اینکه چیزی Return کنیم مستقیما مقداردهی انجام دادیم.
البته یک نکته اضافه کنم که با این روش ارسال ، گرفتن مقدار متغیر هم امکانپذیره.
------------------------------------------------
موفق باشید

امیـرحسین
یک شنبه 05 خرداد 1392, 20:57 عصر
فرض کنید value$ حاوی یه string بزرگه. در این حالت کد زیر باعت میشه این محتوا کپی شه:

$a = $value;
اما کد زیر:

$a = &$value;
محتوا رو کپی نمیکنه فقط به اون ارجاع (reference) میده. یعنی انگار برای یه متغیر دو تا نام داریم یا برای یه محتوا دو تا متغیر داریم. (مث shortcut تو ویندوز)
در واقع محتوا داخل value$ هست و a$ فقط یه آدرس به value$ هستش.
اگر a$ رو تغییر بدیم ارجاع پیدا میکنه به value$ و اون تغییر میکنه و اگر value$ رو تغییر بدیم خود محتوای اصلی رو تغییر دادیم...

$value = 1;
$a = &$value;
echo '$a: ' . $a; // $a: 1
echo '$value: ' . $value; // $value: 1

$value = 2;
echo '$a: ' . $a; // $a: 2
echo '$value: ' . $value; // $value: 2

$a = 3;
echo '$a: ' . $a; // $a: 3
echo '$value: ' . $value; // $value: 3

قبل از توابع هم باعث میشه تا مقدار بازگشتی تابع بجای مقدار و محتوا همون آدرس محتوا در حافظه باشه.

جاهایی که نیاز داریم تا اطلاعات حجیم رو دست به دست کنیم بهتره از این قابلیت استفاده کنیم.

توی نسخه‌های جدید PHP اشیا با reference به هم نسبت داده میشن. یعنی اگر مثلا b$ یک شی باشه، کد زیر ازش کپی نمیسازه یه متغیر مرجع میسازه:

$c = $b;
(برای کپی کردن اشیا باید از clone استفاده بشه)
قدیما مثلا اگه یه شی حاوی کانکشن دیتابیس داشتن با & دست به دست میکردن ولی الان دیگه نیاز نیست.

PHP.net :: References Explained (http://www.php.net/manual/en/language.references.php)