استخدام 'call_user_func'
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 5 من 68.
توفر الدالة call_user_func() طريقة قوية لاستدعاء الدوال ديناميكياً في PHP. بدلاً من استدعاء دالة مباشرة باسمها، يمكنك تخزين اسم الدالة في متغير نصي واستخدام call_user_func() لتنفيذها.
إليك الصيغة الأساسية:
<?php
function greet() {
echo "Hello World!";
}
$functionName = "greet";
call_user_func($functionName); // المخرجات: Hello World!
?>يصبح هذا مفيداً بشكل خاص عندما تحتاج إلى استدعاء دوال مختلفة بناءً على مدخلات المستخدم أو الشروط. يمكنك أيضاً تمرير وسائط (arguments) إلى الدالة عن طريق تضمينها كمعلمات (parameters) إضافية:
<?php
function add($a, $b) {
return $a + $b;
}
$operation = "add";
$result = call_user_func($operation, 5, 3);
echo $result; // المخرجات: 8
?>يعد استدعاء الدوال الديناميكي هذا ذا قيمة خاصة عند بناء تطبيقات مرنة حيث يتم تحديد الدالة المحددة المراد تنفيذها في وقت التشغيل (runtime)، مثل الآلات الحاسبة، أو معالجات الأوامر، أو أنظمة التوجيه.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء ثلاث دوال: multiply تأخذ رقمين وتعيد حاصل ضربهما، و subtract تأخذ رقمين وتعيد الفرق بينهما، و divide تأخذ رقمين وتعيد ناتج قسمتهما.
ستتلقى ثلاثة مدخلات: اسم العملية ("multiply"، أو "subtract"، أو "divide")، ورقمين. اقرأ جميع المدخلات الثلاثة، واستخدم call_user_func() لتنفيذ الدالة المناسبة مع الرقمين، واطبع النتيجة.
تنسيق المدخلات: ثلاثة أسطر - السطر الأول يحتوي على اسم العملية، والسطر الثاني يحتوي على الرقم الأول، والسطر الثالث يحتوي على الرقم الثاني
المخرجات المتوقعة: نتيجة العملية
ورقة مرجعية
تسمح لك الدالة call_user_func() باستدعاء الدوال ديناميكيًا باستخدام متغير نصي يحتوي على اسم الدالة:
<?php
function greet() {
echo "Hello World!";
}
$functionName = "greet";
call_user_func($functionName); // المخرجات: Hello World!
?>يمكنك تمرير الوسائط إلى الدالة عن طريق تضمينها كمعاملات إضافية:
<?php
function add($a, $b) {
return $a + $b;
}
$operation = "add";
$result = call_user_func($operation, 5, 3);
echo $result; // المخرجات: 8
?>جرّب بنفسك
<?php
// قراءة المدخلات
$operation = trim(fgets(STDIN));
$num1 = floatval(fgets(STDIN));
$num2 = floatval(fgets(STDIN));
// TODO: قم بإنشاء الدوال الثلاث (الضرب، الطرح، القسمة) هنا
// TODO: استخدم call_user_func() لتنفيذ الدالة المناسبة
// طباعة النتيجة
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'مراجعة: ترتيب لوحة المتصدرين