الدالة المجهولة (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
?>
function | fn | |
|---|---|---|
| الجسم | عدّة أسطر، 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العادية عندها.
🎯 التالي: فرز المصفوفات ودوالها البرمجية.