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

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

جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 7 من 68.

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

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

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

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

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

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

أنشئ دالة تسمى updateInventory تأخذ ثلاث معاملات: مرجع لمتغير الكمية، والمبلغ المراد إضافته، والمبلغ المراد إزالته. يجب أن تقوم الدالة بتعديل الكمية الأصلية عن طريق إضافة المبلغ الأول وطرح المبلغ الثاني.

ستتلقى ثلاثة مدخلات: الكمية الأولية، والمبلغ المراد إضافته، والمبلغ المراد إزالته. اقرأ المدخلات الثلاثة، وأنشئ متغيراً بالكمية الأولية، واستدعِ الدالة updateInventory ممرراً الكمية بالمرجع (by reference) مع مبالغ الإضافة والإزالة، ثم اطبع الكمية المحدثة.

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

المخرجات المتوقعة: الكمية المحدثة بعد الإضافة والإزالة

ورقة مرجعية

بشكل افتراضي، تمرر PHP المتغيرات إلى الدوال بالقيمة (نسخة). لتعديل المتغير الأصلي، استخدم التمرير بالمرجع (pass by reference) عن طريق إضافة علامة العطف (&) قبل اسم المعامل:

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

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

ينشئ المعامل &$number رابطاً مباشراً بالمتغير الأصلي، مما يسمح للدالة بتعديله دون الحاجة لإرجاع قيمة. هذا مفيد لتعديل متغيرات متعددة أو العمل مع هياكل بيانات كبيرة بكفاءة.

جرّب بنفسك

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

// إنشاء متغير الكمية
$quantity = $initialQuantity;

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

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

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

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

جميع دروس Logic & Flow