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

الدوال السهمية في PHP: صيغة fn() => مع أمثلة

الدالة السهمية دالة مجهولة من تعبير واحد تُكتب fn($x) => $x * 2. تستخدم المتغيرات الخارجية تلقائيًا، بالقيمة، دون use. تعلّم الصيغة، وكيف يعمل الالتقاط، والأنواع، ودوال الاستدعاء لـ array_map وusort، ومتى تستخدم دالة مغلقة كاملة بدلًا منها.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

الدالة السهمية دالة مجهولة قصيرة: fn($x) => $x * 2. الجسم بعد => تعبير واحد تُعاد قيمته، وأي متغير من الشيفرة المحيطة يستخدمه التعبير يُلتقط تلقائيًا، بالقيمة. الدوال السهمية موجودة منذ PHP 7.4 وتُستخدم غالبًا دوالَّ استدعاء.

الصيغة

fn، ثم قائمة المعاملات، ثم =>، ثم تعبير واحد. تعمل أنواع المعاملات والقيم الافتراضية ونوع القيمة المعادة كما في الدوال العادية:

لا توجد كلمة return ولا أقواس معقوصة. ومع ذلك يمكن تقسيم التعبير الطويل على عدة أسطر لتسهيل القراءة.

تُلتقط المتغيرات الخارجية بالقيمة

ترى الدالة السهمية كل متغير في النطاق الذي أُنشئت فيه. وتنسخ قيمها في تلك اللحظة. التغييرات داخلها تبقى داخلها، والتغييرات في الخارج بعد إنشاء الدالة لا تراها:

هذا هو الفرق الرئيسي عن function () use (&$count)، التي تستطيع مشاركة متغير بالمرجع. لا تستطيع الدالة السهمية إعادة إسناد متغير خارجي. لكنها تستطيع تغيير كائن التقطته (النسخة مقبض للكائن نفسه)، ويعمل المعامل المصرّح به بالمرجع كما في أي دالة: fn(array &$list) => $list[] = 'x'.

دوال الاستدعاء لـ array_map وarray_filter وusort

تأخذ معظم دوال المصفوفات دالة استدعاء، وهناك توفّر الدوال السهمية أكثر الضجيج. قارن تصفية واحدة مكتوبة بالطريقتين:

يعيد <=> القيمة -1 أو 0 أو 1، وهذا بالضبط ما تريده usort()، فيتسع الترتيب حسب حقل في سطر واحد. بدّل بين $a و$b للترتيب التنازلي.

دوال سهمية تعيد دوال سهمية

تشمل المتغيرات الملتقطة معاملات الدالة السهمية المحيطة، لذا يمكنك تداخلها لبناء دوال من قيم أخرى:

لاحظ أن array_filter() تحتفظ بالمفاتيح الأصلية، ولهذا تبدأ النتيجة عند الفهرس 1.

fn مقابل function: متى تحتاج إلى دالة مغلقة كاملة

تتوقف الدوال السهمية عن الملاءمة عندما يحتاج الجسم إلى أكثر من تعبير واحد أو يجب أن يغيّر متغيرًا خارجيًا. عندها استخدم دالة مجهولة:

fn($x) => ...function ($x) use ($y) { ... }
الجسمتعبير واحدأي جمل
الإرجاعتلقائيreturn صريحة
المتغيرات الخارجيةكل المستخدم منها، تلقائيًافقط المذكورة في use
الالتقاط بالمرجعلانعم، use (&$y)
متاحة منذPHP 7.4PHP 5.3

عندما تبدو الدالة السهمية ضيقة، فغالبًا ما يعني ذلك أن المهمة مهمتان. تقسيمها إلى تصفية وجمع، كما في المثال أعلاه، يُبقي كل دالة استدعاء تعبيرًا واحدًا.

الأسئلة الشائعة

ما هي الدالة السهمية في PHP؟

دالة مجهولة قصيرة أُضيفت في PHP 7.4: fn($x) => $x * 2. جسمها تعبير واحد تُعاد قيمته تلقائيًا، وتستطيع قراءة المتغيرات من النطاق المحيط دون عبارة use.

هل يمكن أن تمتد الدالة السهمية في PHP على عدة أسطر؟

لا. يجب أن يكون الجسم بعد => تعبيرًا واحدًا؛ فلا توجد كتلة جمل. يمكنك تقسيم تعبير طويل على عدة أسطر، لكن إذا احتجت إلى if أو حلقات أو عدة جمل، فاستخدم function () use (...) { ... } بدلًا منها.

هل تستطيع الدالة السهمية تعديل متغير خارجي؟

لا. تلتقط الدوال السهمية المتغيرات الخارجية بالقيمة، لذا لا تغيّر fn() => $count++ إلا نسختها الخاصة ويبقى $count في الخارج كما هو. لتعديل متغير خارجي، استخدم دالة مغلقة مع use (&$count).

ما الفرق بين fn وfunction في PHP؟

تحمل fn($x) => ... تعبيرًا واحدًا، وتعيده ضمنيًا، وتلتقط كل متغير خارجي تستخدمه بالقيمة. أما function ($x) use ($y) { ... } فتحمل أي جمل، وتحتاج إلى return صريحة، ولا ترى إلا المتغيرات المذكورة في use، التي قد تُلتقط بالمرجع.

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن