الدالة call_user_func()
في PHP
(PHP 4, PHP 5, PHP 7)
تستدعي الدالة call_user_func()
دالةَ رد النداء callback
المُمرَّرة في المعامل الأول.
الوصف
mixed call_user_func ( callable $callback [, mixed $parameter[, mixed $... ]] )
تستدعي الدالة call_user_func()
دالةَ رد النداء المُمرَّرة كأوّل معامل مع تمرير المعاملات البقية لهذه الدالة كوسائط لدالة رد النداء.
المعاملات
callback
دالة رد النداء (callback function) التي نريد استدعاءها.
parameter
صفر أو أكثر من المعاملات التي نريد تمريرها كوسائط إلى دالة رد النداء.
لاحظ أن المعاملات المعطية في call_user_func()
لا تمرّر بالمرجعية.
المثال 1: مثال عن المراجع مع الدالة call_user_func()
<?php
error_reporting(E_ALL);
function increment(&$var)
{
$var++;
}
$a = 0;
call_user_func('increment', $a);
echo $a."\n";
// يمكن استخدام هذا بدلاً عن ذلك
call_user_func_array('increment', array(&$a));
echo $a."\n";
?>
سينتج المثال في الأعلى التالي:
0
1
القيم المُعادة
ستُعاد من الدالةcall_user_func()
القيمة التي أعادتها دالة رد النداء callback
.
سجل التغييرات
الإصدار | الوصف |
---|---|
5.3.0 | تم تغيير تفسير الكلمات المفتاحية كائنية التوجه مثل parent و self . إذ كان استدعائها سابقًا من خلال السياق النحوي باستخدام النقطتين المزدوجتين الرأسيتين : سيؤدي إلى ظهور التحذير E_STRICT لأنّها كانت تُفسَّر على أنها ساكنة (static).
|
أمثلة
المثال 2: مثال عن الدالة call_user_func()
<?php
function barber($type)
{
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?>
سينتج المثال في الأعلى ما يلي:
You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem
المثال 3: استخدام مجالات الأسماء مع الدالة call_user_func()
<?php
namespace Foobar;
class Foo {
static public function test() {
print "Hello world!\n";
}
}
call_user_func(__NAMESPACE__ .'\Foo::test'); //5.3.0 بدءًا من الاصدار
call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // 5.3.0 بدءًا من الاصدار
?>
سينتج المثال في الأعلى ما يلي:
Hello world!
Hello world!
المثال 4: استخدام دالة تابعة لصنف مع call_user_func()
<?php
class myclass {
static function say_hello()
{
echo "Hello!\n";
}
}
$classname = "myclass";
call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); //5.2.3 بدءًا من الاصدار
$myobject = new myclass();
call_user_func(array($myobject, 'say_hello'));
?>
سينتج المثال في الأعلى:
Hello!
Hello!
Hello!
المثال 5: استخدام دالة مجهولة مع الدالة call_user_func()
<?php
call_user_func(function($arg) { print "[$arg]\n"; }, 'test'); /* 5.3.0 بدءًا من الاصدار */
?
ملاحظات
لن تستدعى دوال رد النداء المسجّلة مع دوال مثل call_user_func()
وcall_user_func_array()
إذا وُجد استثناء خلال الاستدعاء السابق لدالة رد النداء.
انظر أيضًا
- الدالة
call_user_func_array()
: استدعاء دالة رد نداء مع تمرير مصفوفة من المعاملات إليها. - الدالة
is_callable()
: التأكد من أن محتوى المتغير يمكن أن يستدعى كدالة - معلومات حول النوع callback.
- الدالة
ReflectionFunction::invokeArgs()
: طلب معاملات الدالة. - الدالة
ReflectionMethod::invoke()
: طلب معاملات دالة في صنف.