انتقل إلى محتوى الدرس

Unsetting Reference Variable Trap تحرير متغير المرجع بعد الحلقة

تعلّم تكرار عناصر المصفوفات عبر حلقة foreach في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
1 صفوف تعليمية
PHP
1 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

قاعدة أمان حرجة في PHP: عند استخدام المرجع &$value في حلقة foreach، يجب دائماً استدعاء unset($value); فور انتهاء قوس الحلقة }:

  • فخ المرجع المعلق (Dangling Reference): يظل متغير الحلقة موجوداً في النطاق بعد انتهاء الحلقة، ويبقى مرتبطاً بالعنصر الأخير في المصفوفة؛ فإذا استخدمت نفس اسم المتغير لاحقاً ستقوم بتخريب العنصر الأخير دون قصد!
  • فك الارتباط عبر unset($val): استدعاء unset($val); يفك ارتباط المتغير المؤقت فقط مع بقاء المصفوفة وعنصرها الأخير سليمين تماماً.
PHP
<?php
$nums = [10, 20, 30];
foreach ($nums as &$n) {
    $n *= 2;
}
unset($n); // Breaks reference to $nums[2]

$n = 999;  // Safe! Does NOT overwrite $nums[2]
echo $nums[0] . ", " . $nums[1] . ", " . $nums[2];