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).

challenge icon

التحدي

سهل

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

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

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

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

جرّب بنفسك

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

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


// TODO: استدعاء الـ closure مع السعر وتخزين النتيجة


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

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

جميع دروس Logic & Flow