دوال الـ Callback
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 4 من 68.
دالة الـ callback هي دالة يتم تمريرها كمعامل (argument) إلى دالة أخرى. بدلاً من استدعاء الدالة فوراً، تقوم بتمرير اسمها بحيث يمكن للدالة المستلمة استدعاؤها لاحقاً عند الحاجة.
لتمرير دالة كدالة استدعاء (callback)، يمكنك ببساطة استخدام اسم الدالة كسلسلة نصية:
<?php
function greet($name) {
echo "Hello, " . $name . "!";
}
function processUser($username, $callback) {
// القيام ببعض المعالجة...
$callback($username); // استدعاء دالة الاستدعاء
}
processUser("Alice", "greet"); // المخرجات: Hello, Alice!
?>في هذا المثال، يتم تمرير "greet" كدالة استدعاء (callback) إلى processUser(). تقوم دالة processUser() بعد ذلك باستدعاء الـ callback باستخدام السلسلة النصية كاسم للدالة.
تعد عمليات الاستدعاء (Callbacks) مفيدة للغاية لأنها تجعل وظائفك أكثر مرونة. يمكن لنفس الوظيفة تنفيذ إجراءات مختلفة اعتمادًا على الاستدعاء الذي تمرره إليها. هذا المفهوم أساسي للعديد من وظائف PHP المدمجة مثل array_map() و array_filter()، والتي ستواجهها لاحقًا في هذه الدورة.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء دالتين: واحدة تسمى formatUppercase تأخذ سلسلة نصية وتعيدها بأحرف كبيرة، والأخرى تسمى formatLowercase تأخذ سلسلة نصية وتعيدها بأحرف صغيرة.
ثم قم بإنشاء دالة تسمى applyFormat تقبل معاملين: سلسلة نصية واسم دالة استدعاء (callback function). يجب أن تقوم هذه الدالة بتطبيق الاستدعاء على النص وإرجاع النتيجة.
ستتلقى مدخلين: نوع العملية ("upper" أو "lower") والنص المراد تنسيقه. اقرأ كلا المدخلين، وحدد دالة الاستدعاء التي ستستخدمها بناءً على نوع العملية، ثم استدعِ applyFormat مع دالة الاستدعاء المناسبة، واطبع النتيجة المنسقة.
تنسيق المدخلات: سطران - السطر الأول يحتوي على نوع العملية ("upper" أو "lower")، والسطر الثاني يحتوي على النص المراد تنسيقه
المخرجات المتوقعة: النص المنسق بناءً على نوع العملية
ورقة مرجعية
دالة رد النداء (callback function) هي دالة يتم تمريرها كوسيط (argument) إلى دالة أخرى. بدلاً من استدعاء الدالة فوراً، تقوم بتمرير اسمها بحيث يمكن للدالة المستلمة استدعاؤها لاحقاً عند الحاجة.
لتمرير دالة كدالة رد نداء، استخدم اسم الدالة كسلسلة نصية (string):
<?php
function greet($name) {
echo "Hello, " . $name . "!";
}
function processUser($username, $callback) {
// القيام ببعض المعالجة...
$callback($username); // استدعاء دالة رد النداء
}
processUser("Alice", "greet"); // المخرجات: Hello, Alice!
?>تجعل دوال رد النداء (Callbacks) الدوال أكثر مرونة من خلال السماح بإجراءات مختلفة اعتماداً على دالة رد النداء التي تمررها إليها.
جرّب بنفسك
<?php
// قراءة المدخلات
$operation = trim(fgets(STDIN));
$text = trim(fgets(STDIN));
// TODO: اكتب كودك أدناه
// إنشاء دالة formatUppercase
// إنشاء دالة formatLowercase
// إنشاء دالة applyFormat
// تحديد أي استدعاء (callback) سيتم استخدامه بناءً على نوع العملية
// استدعاء applyFormat مع الاستدعاء المناسب
// طباعة النتيجة
echo $result;
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين