Home >Backend Development >PHP Tutorial >Detailed explanation of usage examples of php functions call_user_func and call_user_func_array

Detailed explanation of usage examples of php functions call_user_func and call_user_func_array

伊谢尔伦
伊谢尔伦Original
2017-06-26 10:47:382042browse

When I looked at UCenter, there was a function call_user_func. I was puzzled because I thought it was a function defined by myself, but I couldn’t find it anywhere. After searching on Baidu, I found out that call_user_func is Built-in function

The call_user_func function is similar to a special method of calling a function. The method of use is as follows:

function a($b,$c) 
{ 
echo $b; 
echo $c; 
} 
call_user_func('a', "111","222"); 
call_user_func('a', "333","444"); 
//显示 111 222 333 444

It is strange to call the method inside the class, but it is used It is an array. I don’t know how the developers considered it. Of course, new is omitted, which is also full of novelty:

class a { 
function b($c) 
{ 
echo $c; 
} 
} 
call_user_func(array("a", "b"),"111"); 
//显示 111

The call_user_func_array function is very similar to call_user_func, except that the parameters are passed in a different way. Make the structure of parameters clearer:

function a($b, $c) 
{ 
echo $b; 
echo $c; 
} 
call_user_func_array('a', array("111", "222")); 
//显示 111 222

The call_user_func_array function can also call methods inside the class

Class ClassA 
{ 
function bc($b, $c) { 
$bc = $b + $c; 
echo $bc; 
} 
} 
call_user_func_array(array('ClassA','bc'), array("111", "222")); 
//显示 333

Both the call_user_func function and the call_user_func_array function support references, which makes them and Ordinary function calls tend to have consistent functions:

function a(&$b) 
{ 
$b++; 
} 
$c = 0; 
call_user_func('a', &$c); 
echo $c;//显示 1 
call_user_func_array('a', array(&$c)); 
echo $c;//显示 2

Simple usage of call_user_func_array in php

<?php 
function foobar($arg, $arg2) { 
echo FUNCTION, " got $arg and $arg2\n"; 
} 
class foo { 
function bar($arg, $arg2) { 
echo METHOD, " got $arg and $arg2\n"; 
} 
} 
// Call the foobar() function with 2 arguments 
call_user_func_array("foobar", array("one", "two")); 
// Call the $foo->bar() method with 2 arguments 
$foo = new foo; 
call_user_func_array(array($foo, "bar"), array("three", "four")); 
?>

The output of the above routine is similar to:
foobar got one and two
foo::bar got three and four
Example #2 call_user_func_array() using namespace name

<?php 
namespace Foobar; 
class Foo { 
static
 public function test($name) { 
print "Hello {$name}!\n"; 
} 
} 
// As of PHP 5.3.0 
call_user_func_array(NAMESPACE .&#39;\Foo::test&#39;, array(&#39;Hannes&#39;)); 
// As of PHP 5.3.0 
call_user_func_array(array(NAMESPACE .&#39;\Foo&#39;, &#39;test&#39;), array(&#39;Philip&#39;)); 
?>

The output of the above routine is similar to:
Hello Hannes!
Hello Philip!
Example #3 Using lambda function

<?php 
$func = function($arg1, $arg2) { 
return $arg1 * $arg2; 
}; 
var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */ 
?>

The above routine will output:
int(8)

The above is the detailed content of Detailed explanation of usage examples of php functions call_user_func and call_user_func_array. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn