اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

ماذا تعني علامة ال& قبل البراميتر في هذه الدالة

 ولماذا يكون ناتج الاخراج a=4 , b=3

 function doSomething(&$arg)
{
	$return=$arg;
	$arg+=1;
	return $return;
	
	}
	$a=3;
	$b=doSomething($a);
	echo "a=".$a;
	echo "<br/>";
	echo "b=".$b;

 

Recommended Posts

  • 1
نشر

يعني ذلك أنّك تمرّر المتغيّر بالمرجع أي تمرّر عنوانه وليس قيمته.

في البرنامج السابق، أسندت القيمة 3 للمتغيّر a$ ثم مرّرته بالمرجع إلى الدالة doSomething، فأصبح كل من المتغيرين arg$ و a$ يشيران إلى نفس القيمة.

ضمن الدالة doSomething أسندنا قيمة arg$ إلى المتغيّر return$ ثم زدنا قيمة arg$ بمقدار واحد:

$arg+=1;

فأصبح كل من arg$ و a$ يحمل القيمة 4

ثم أعادت الدالة القيمة الأصلية للمتغيّر a$ (قبل الزيادة) والتي خزنّاها ضمن المتغيّر return$ وذلك عن طريق العبارة:

return $return;

ستخزّن القيمة المُعادة ضمن المتغيّر b$ الذي ستكون قيمته في هذه الحالة 3، وتصبح قيمة a$ تساوي 4.

  • 1
نشر

هذا السلوك طبيعي. لأنّك عندئذٍ تمرّر المتغيّر a$ بالقيمة (بدون الرمز &) وليست بالمرجع. ففي هذه الحالة ستمرّر نسخة عن قيمة a$ وهي 3 إلى الدالة doSomething التي ستعدّل هذه القيمة ضمنها ولكن لن يؤثّر ذلك على قيمة a$ الأصلية أبدًا في هذه الحالة. انس الآن المتغيّر b$.

  • 0
نشر (معدل)

شكرا جزيلا

 ولكن لماذا عندما احذف ال& تطبع الناتج 

a=3

b=3

ماتاثيرها بالضبط ؟ اذا امكن التعليق ولكم فائق الشكر

 

تم التعديل في بواسطة java

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...