الدالة call_user_func()‎ في PHP

من موسوعة حسوب
< 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() ‎ إذا وُجد استثناء خلال الاستدعاء السابق لدالة رد النداء.

انظر أيضًا

مصادر