call_user_func

(PHP 4, PHP 5, PHP 7)

call_user_funcCall the callback given by the first parameter

Descrierea

call_user_func ( callable $callback [, mixed $... ] ) : mixed

Calls the callback given by the first parameter and passes the remaining parameters as arguments.

Parametri

callback

The callable to be called.

...

Zero or more parameters to be passed to the callback.

Notă:

Note that the parameters for call_user_func() are not passed by reference.

Example #1 call_user_func() example and references

<?php
error_reporting
(E_ALL);
function 
increment(&$var)
{
    
$var++;
}

$a 0;
call_user_func('increment'$a);
echo 
$a."\n";

// You can use this instead
call_user_func_array('increment', array(&$a));
echo 
$a."\n";
?>

Exemplul de mai sus va afișa:

Warning: Parameter 1 to increment() expected to be a reference, value given in …
0
1

Valorile întoarse

Returns the return value of the callback.

Istoricul schimbărilor

Versiune Descriere
5.3.0 The interpretation of object oriented keywords like parent and self has changed. Previously, calling them using the double colon syntax would emit an E_STRICT warning because they were interpreted as static.
5.3.0 If the called function expects a parameter to be passed by reference, an E_WARNING is now issued.

Exemple

Example #2 call_user_func() example

<?php
function barber($type)
{
    echo 
"You wanted a $type haircut, no problem\n";
}
call_user_func('barber'"mushroom");
call_user_func('barber'"shave");
?>

Exemplul de mai sus va afișa:

You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem

Example #3 call_user_func() using namespace name

<?php

namespace Foobar;

class 
Foo {
    static public function 
test() {
        print 
"Hello world!\n";
    }
}

call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0
call_user_func(array(__NAMESPACE__ .'\Foo''test')); // As of PHP 5.3.0

?>

Exemplul de mai sus va afișa:

Hello world!
Hello world!

Example #4 Using a class method with 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'); // As of 5.2.3

$myobject = new myclass();

call_user_func(array($myobject'say_hello'));

?>

Exemplul de mai sus va afișa:

Hello!
Hello!
Hello!

Example #5 Using lambda function with call_user_func()

<?php
call_user_func
(function($arg) { print "[$arg]\n"; }, 'test'); /* As of PHP 5.3.0 */
?>

Exemplul de mai sus va afișa:

[test]

Note

Notă:

Funcțiile de apel invers înregistrate cu astfel de funcții ca call_user_func() și call_user_func_array() nu vor fi apelate dacă există o excepție neinterceptată emisă într-un apel precedent.

A se vedea și