تخطَّ إلى المحتوى

🐘 شرح PHP

الدوال المجهولة والإغلاقات (Closures)

الدرس 25 من 29· ⏱ 2 دقائق قراءة· 🗓 آخر تحديث: ٢١ يوليو ٢٠٢٦

الدالة المجهولة (Anonymous Function)

دالة بلا اسم، تُخزَّن في متغيّر أو تُمرَّر مباشرة كقيمة — مفيدة جدًا مع الدوال التي تحتاج "دالة أخرى" كمعامل:

<?php
$greet = function ($name) {
    return "أهلًا يا $name";
};

echo $greet("سارة");   // أهلًا يا سارة
?>

التقاط متغيّرات خارجية بـ use

الدالة المجهولة لا "ترى" المتغيّرات المحيطة بها تلقائيًا. لإدخالها نستخدم use، وتُنسَخ قيمتها وقت تعريف الدالة لا وقت استدعائها:

<?php
$tax = 15;

$withTax = function ($price) use ($tax) {
    return $price + ($price * $tax / 100);
};

echo $withTax(100);   // 115
?>

الالتقاط بالمرجع

لو أردت أن ترى الدالة أي تغيير لاحق على المتغيّر، التقطه بالمرجع بإضافة &:

<?php
$count = 0;

$increment = function () use (&$count) {
    $count++;
};

$increment();
$increment();
echo $count;   // 2
?>

💡 بدون & كانت الدالة ستنسخ 0 وتزيده داخليًا فقط، دون أن يتغيّر $count الأصلي.

دوال الأسهم fn (Arrow Functions)

منذ PHP 7.4 توجد صيغة أقصر لدالة من تعبير واحد، تلتقط المتغيّرات المحيطة تلقائيًا (بالقيمة) دون كتابة use:

<?php
$tax = 15;

$withTax = fn($price) => $price + ($price * $tax / 100);

echo $withTax(100);   // 115
?>
functionfn
الجسمعدّة أسطر، return صريحتعبير واحد فقط، بلا {}
التقاط المتغيّراتيدويًا عبر useتلقائي بالقيمة
الاستخدام الشائعمنطق أطولاستدعاء سريع داخل دالة أخرى

⚠️ fn تلتقط دائمًا بالقيمة — لا توجد صيغة use (&$var) لدوال الأسهم.

أين تُستخدم عمليًا؟

الاستخدام الأشهر هو تمرير دالة مجهولة كمعامل لدالة أخرى (callback)، كما سنرى بالتفصيل مع دوال المصفوفات في الدرس القادم:

<?php
$nums = [1, 2, 3, 4];

$doubled = array_map(fn($n) => $n * 2, $nums);
print_r($doubled);   // [2, 4, 6, 8]
?>

أخطاء شائعة

  • نسيان use مع function الكلاسيكية فيظهر خطأ "Undefined variable".
  • توقّع أن use ($var) تعكس تغييرات لاحقة — بدون & هي نسخة ثابتة وقت التعريف.
  • محاولة كتابة أكثر من تعبير داخل fn — غير مسموح، استخدم function العادية عندها.

🎯 التالي: فرز المصفوفات ودوالها البرمجية.

شرح الدوال المجهولة والإغلاقات (Closures) — PHP بالعربي
الدوال المجهولة والإغلاقات (Closures)PHP بالعربي · The Code Fix

📚 لمزيد من التعمّق في PHP، راجِع التوثيق الرسمي لـ PHP.

هل كان هذا الدرس مفيدًا؟