Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التمرير بالمرجع

جزء من قسم المنطق وتدفق التنفيذ في رحلة PHP على Coddy. الدرس 7 من 68.

بشكل افتراضي، عند تمرير variable إلى function في PHP، تستلم function نسخة من قيمة ذلك variable. وهذا يعني أن أي تغييرات تُجرى داخل function لا تؤثر في variable الأصلي خارج function.

ومع ذلك، قد ترغب أحيانًا في أن تقوم function بتعديل variable الأصلية مباشرةً. وهنا يأتي دور التمرير بالمرجع. من خلال إضافة علامة (&) قبل اسم parameter في تعريف function، فإنك تخبر PHP بتمرير variable الفعلية بدلًا من نسخة منها:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // المخرجات: 20
?>

لاحظ كيف تغيّرت قيمة $value من 10 إلى 20، رغم أننا لم نُرجع أي شيء من الدالة. ينشئ المُعامل &$number رابطًا مباشرًا إلى المتغيّر الأصلي $value، مما يسمح للدالة بتعديله مباشرةً.

تكون هذه التقنية مفيدة بشكل خاص عندما تحتاج إلى أن تعدّل دالةٌ عدةَ متغيرات أو عندما تتعامل مع هياكل بيانات كبيرة، حيث يكون النسخ غير فعّال.

challenge icon

التحدي

سهل

أنشئ function تُسمّى updateInventory وتأخذ ثلاثة parameter: reference إلى quantity variable، ومقدارًا للإضافة، ومقدارًا للإزالة. يجب أن تعدّل function القيمة الأصلية لـ quantity بإضافة المقدار الأول وطرح المقدار الثاني.

ستتلقى ثلاثة inputs: quantity الأولية، ومقدار الإضافة، ومقدار الإزالة. اقرأ inputs الثلاثة، وأنشئ variable بالقيمة الأولية لـ quantity، واستدعِ function updateInventory مع تمرير quantity باستخدام reference، بالإضافة إلى مقداري add وremove، ثم اطبع quantity المحدّثة.

تنسيق الإدخال: ثلاثة أسطر - يحتوي السطر الأول على quantity الأولية (number)، ويحتوي السطر الثاني على مقدار الإضافة (number)، ويحتوي السطر الثالث على مقدار الإزالة (number)

الناتج المتوقع: quantity المحدّثة بعد الإضافة والإزالة

جرّب بنفسك

<?php
// اقرأ المدخلات
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// أنشئ متغير quantity
$quantity = $initialQuantity;

// TODO: أنشئ دالة updateInventory هنا التي تأخذ معاملًا مرجعيًا

// TODO: استدعِ دالة updateInventory مع quantity بالمرجع

// أخرج quantity المحدثة
echo $quantity;
?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم PHP عبر الإنترنت