كيف يعمل foreach في PHP فعليًا؟ تحليل مفصل مع أمثلة
تحية للجميع! لقد كنت أكتب بلغة PHP لعدة أشهر، لكنني ما زلت لا أفهم تمامًا كيف يعمل foreach. في التوثيق مكتوب أنه 'طريقة ملائمة لتكرار المصفوفات'، لكنني أعاني من أسئلة لا أجد لها إجابات.
على سبيل المثال، أعلم أنه عند استخدام foreach مع مرجع (&$value) يمكن تعديل عناصر المصفوفة. لكن لماذا بعد انتهاء الحلقة لا يزال المتغير $value يشير إلى آخر عنصر؟ هذا يؤدي إلى أخطاء غير متوقعة.
كما أنني مهتم بمعرفة: ماذا يحدث 'تحت الغطاء'؟ هل يتم إنشاء نسخة من المصفوفة في كل foreach؟ سمعت أن PHP تستخدم آلية copy-on-write، لكنني لا أفهم كيف يعمل هذا في سياق الحلقات.
إليك مثال يربكني:
```php
$array = [1, 2, 3];
foreach ($array as &$value) {
$value *= 2;
}
// الآن $array = [2, 4, 6]
// لكن إذا قمت بعد الحلقة:
foreach ($array as $value) {
echo $value;
}
// النتيجة: 2 4 4 بدلاً من 2 4 6! لماذا؟
```
كما لاحظت أنه عند استخدام foreach على المصفوفات المتداخلة