الدوال المجهولة والإغلاقات
اكتبوا دوال مضمنة والتقطوا المتغيرات باستخدام use.
الدوال المجهولة والإغلاقات درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
ما الدوال المجهولة؟
الدالة المجهولة (lambda) هي دالة بلا اسم. وهي في PHP نسخة من الفئة المضمنة Closure، ويمكن تخزينها في متغير أو تمريرها كوسيط أو إرجاعها من دالة أخرى.
دالة مجهولة أساسية
أسند دالة إلى متغير ثم استدعها:
<?php
$double = function(int $n): int {
return $n * 2;
};
echo $double(5); // 10
echo $double(21); // 42تمرير الدوال المجهولة
مرر إغلاقًا كوسيط إلى دوال مثل array_map أو usort، أو إلى دوال الاستدعاء الخاصة بك:
<?php
$nums = [3, 1, 4, 1, 5, 9];
$squared = array_map(function(int $n): int {
return $n ** 2;
}, $nums);
print_r($squared); // [9, 1, 16, 1, 25, 81]إرجاع الدوال
يمكن للدالة إنشاء إغلاق وإرجاعه، وهذا يُعد نمط المصنع:
<?php
function makeMultiplier(int $factor): Closure {
return function(int $n) use ($factor): int {
return $n * $factor;
};
}
$triple = makeMultiplier(3);
$tenX = makeMultiplier(10);
echo $triple(5); // 15
echo $tenX(5); // 50الإغلاقات و use
يمكن للإغلاقات التقاط المتغيرات من النطاق الخارجي باستخدام use. ويكون الالتقاط حسب القيمة (نسخة) ما لم تضف &:
<?php
$taxRate = 0.18;
$addTax = function(float $price) use ($taxRate): float {
return $price * (1 + $taxRate);
};
$taxRate = 0.20; // change outer variable
echo $addTax(100); // 118 — captured value at creation timeالالتقاط بالمرجع باستخدام use(&)
للسماح للإغلاق برؤية القيم الخارجية المحدّثة، استخدم الالتقاط بالمرجع:
<?php
$count = 0;
$increment = function() use (&$count): void {
$count++;
};
$increment();
$increment();
echo $count; // 2الدوال السهمية (PHP 7.4)
الدوال السهمية إغلاقات مختصرة ذات تعبير واحد، وتلتقط النطاق الخارجي تلقائيًا حسب القيمة:
<?php
$rate = 1.18;
$prices = [10, 20, 30];
// Arrow function — no 'use' needed
$withTax = array_map(fn($p) => $p * $rate, $prices);
print_r($withTax); // [11.8, 23.6, 35.4]لا يمكن للدوال السهمية تعديل النطاق الخارجي
تلتقط الدوال السهمية المتغيرات حسب القيمة فقط، ولذلك لا يمكنها تعديل المتغيرات الخارجية:
<?php
$total = 0;
$nums = [1, 2, 3];
// This does NOT modify $total!
array_walk($nums, fn($n) => $total += $n);
echo $total; // 0
// Use a reference closure for mutation:
array_walk($nums, function($n) use (&$total) { $total += $n; });
echo $total; // 6الإغلاقات كدوال استدعاء
تقبل دوال PHP عديدة قيمة قابلة للاستدعاء، ويمكنك تمرير إغلاق أو مصفوفة مثل [$obj, 'method'] أو اسم دالة كسلسلة نصية:
<?php
$words = ['banana', 'apple', 'cherry'];
usort($words, fn($a, $b) => strcmp($a, $b));
print_r($words); // ['apple', 'banana', 'cherry']إغلاق مستدعى فورًا
يمكنك تعريف إغلاق واستدعاؤه في السطر نفسه، وهو أمر مفيد لإنشاء نطاق معزول:
<?php
$result = (function(): int {
$x = 10;
$y = 20;
return $x + $y;
})();
echo $result; // 30
// $x and $y are not in outer scopeClosure::bind و bindTo
يمكنك إعادة ربط إغلاق بسياق كائن مختلف باستخدام Closure::bind():
<?php
class Counter {
private int $value = 0;
}
$increment = Closure::bind(function(int $by): void {
$this->value += $by;
}, new Counter(), Counter::class);
// Now $increment has access to private $valueتحقق سريع
ما الفرق الأساسي بين إغلاق عادي يستخدم use ودالة سهمية في PHP؟
مراجعة: الدوال المجهولة والإغلاقات
ملخص:
- تُخزّن الدوال المجهولة في المتغيرات ويمكن تمريرها
- تلتقط الإغلاقات المتغيرات الخارجية باستخدام
use($var)حسب القيمة أوuse(&$var)بالمرجع - تلتقط الدوال السهمية (PHP 7.4) النطاق الخارجي تلقائيًا حسب القيمة
- تُستخدم للدوال الراجعة مثل: array_map وusort وarray_filter…
- يمكن إرجاعها من دوال المصنع
الأسئلة الشائعة
هل درس «الدوال المجهولة والإغلاقات» مجاني؟
نعم — نص درس «الدوال المجهولة والإغلاقات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «الدوال المجهولة والإغلاقات»؟
اكتبوا دوال مضمنة والتقطوا المتغيرات باستخدام use. تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الدوال المجهولة والإغلاقات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف الدوال واستدعاؤها
- المعاملات الافتراضية والمتغيرة العدد
- نطاق المتغيرات: محلي وعام
- الدوال المجهولة والإغلاقات