【正规网赌平台】php自定义函数call_user_func和call_user_func_array详解

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP
将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
变量函数不能用于语言结构,例如 echo() ,print() ,unset() ,isset()
,empty() ,include() ,require()
以及类似的语句。需要使用自己的包装函数来将这些结构用作变量函数。 
Example #1 可变函数示例

call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:

复制代码 代码如下:

复制代码 代码如下:

<?php
function  foo () {
    echo  “In foo()<br />/n” ;
}
function  bar ( $arg  =  ” ) {
    echo  “In bar(); argument was ‘ $arg ‘.<br />/n” ;
}
// 使用 echo 的包装函数
function  echoit ( $string )
{
    echo  $string ;
}
$func  =  ‘foo’ ;
$func ();         // This calls foo()
$func  =  ‘bar’ ;
$func ( ‘test’ );   // This calls bar()
$func  =  ‘echoit’ ;
$func ( ‘test’ );   // This calls echoit()
?>
还可以利用可变函数的特性来调用一个对象的方法。

正规网赌平台,function a($b,$c)
{
echo $b;
echo $c;
}
call_user_func(‘a’, “111”,”222″);
call_user_func(‘a’, “333”,”444″);
//显示 111 222 333 444
?>

Example #2 可变方法范例

调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:

复制代码 代码如下:

复制代码 代码如下:

<?php
class  Foo
{
    function  Variable ()
    {
         $name  =  ‘Bar’ ;
         $this -> $name ();  // This calls the Bar() method
     }
    function  Bar ()
    {
        echo  “This is Bar” ;
    }
}
$foo  = new  Foo ();
$funcname  =  “Variable” ;
$foo -> $funcname ();    // This calls $foo->Variable()
?>

class a {
function b($c)
{
echo $c;
}
}
call_user_func(array(“a”, “b”),”111″);
//显示 111
?>

您可能感兴趣的文章:

call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:

复制代码 代码如下:

function a($b, $c)
{
echo $b;
echo $c;
}
call_user_func_array(‘a’, array(“111”, “222”));
//显示 111 222
?>

call_user_func_array函数也可以调用类内部的方法的

复制代码 代码如下:

Class ClassA
{
function bc($b, $c) {
$bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array(‘ClassA’,’bc’), array(“111”, “222”));
//显示 333
?>

call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:

复制代码 代码如下:

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

相关文章