• 0

أحتاج مساعدة في فهم كود php

السلام عليكم

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

 ولماذا يكون ناتج الاخراج 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;

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

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

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

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

$arg+=1;

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

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

return $return;

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

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

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

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

شكرا جزيلا

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

a=3

b=3

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

 

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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن