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

الـ Closures وكلمة 'use'

جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 2 من 68.

بشكل افتراضي، لا يمكن للدوال المجهولة (anonymous functions) الوصول إلا إلى المتغيرات التي يتم تمريرها إليها كمعلمات. ولكن ماذا لو كنت بحاجة إلى أن تصل دالة الإغلاق (closure) الخاصة بك إلى متغير من النطاق المحيط؟ هنا يأتي دور الكلمة المفتاحية use.

تسمح الكلمة المفتاحية use للانغلاق (closure) بـ "التقاط" المتغيرات من نطاقها الأب واستخدامها داخل الدالة:

<?php
$message = "Welcome";

$greeting = function($name) use ($message) {
    echo $message . ", " . $name . "!";
};

$greeting("Bob");  // المخرجات: Welcome, Bob!
?>

لاحظ كيف أن $message تم تعريفه خارج الدالة، ولكن من خلال تضمين use ($message) بعد قائمة المعاملات، يمكن للـ closure الوصول إلى هذا المتغير واستخدامه. يمكنك التقاط متغيرات متعددة عن طريق الفصل بينها بفاصلات: use ($var1, $var2).

تجعل هذه الميزة الـ closures أكثر قوة بكثير، مما يتيح لها التعامل مع البيانات من سياقها المحيط مع الحفاظ في الوقت ذاته على مرونة الدوال المجهولة (anonymous functions).

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

أنشئ دالة مجهولة (anonymous function) تلتقط نسبة الخصم من النطاق المحيط باستخدام الكلمة المفتاحية use. يجب أن تأخذ الدالة السعر كمعامل (parameter) وتعيد السعر النهائي بعد تطبيق الخصم.

ستتلقى مدخلين: نسبة الخصم والسعر الأصلي. اقرأ كلا المدخلين، وأنشئ closure يلتقط نسبة الخصم، ثم استدعِ الـ closure مع السعر، واطبع السعر النهائي بعد الخصم.

تنسيق المدخلات: سطران - السطر الأول يحتوي على نسبة الخصم (رقم)، والسطر الثاني يحتوي على السعر الأصلي (رقم قد يحتوي على كسور عشرية)

المخرجات المتوقعة: السعر النهائي بعد تطبيق الخصم

ورقة مرجعية

تسمح الكلمة المفتاحية use للإغلاقات (closures) بالتقاط المتغيرات من نطاقها الأب (parent scope):

<?php
$message = "Welcome";

$greeting = function($name) use ($message) {
    echo $message . ", " . $name . "!";
};

$greeting("Bob");  // المخرجات: Welcome, Bob!
?>

يمكنك التقاط متغيرات متعددة عن طريق الفصل بينها بفاصلات: use ($var1, $var2).

جرّب بنفسك

<?php
// قراءة المدخلات
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));

// TODO: قم بإنشاء دالة مجهولة (anonymous function) تلتقط نسبة الخصم باستخدام 'use'
// يجب أن تأخذ الدالة معامل السعر وتعيد السعر النهائي بعد الخصم


// TODO: استدعِ الدالة المغلقة (closure) مع السعر وقم بتخزين النتيجة


// طباعة السعر النهائي
echo $finalPrice;
?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow