1.call_user_func:
普通函数
<?php
public function a($i,$m)
{
echo $i;
echo $m;
}
call_user_func('a','1','2');
//输出结果:12
?>
类的方法
<?php
class a{
function a($i){
echo $i
}
public static b($m){
echo $m
}
}
//php < 5.3 ,b()方法当作 a 的静态方法
call_user_func(array('a','b'),'1');
//php >= 5.3 类的公开非静态方法必须在类实例化后方可调用否,否则会提示strict性错误
$obj=new a;
call_user_func(array($obj,'b'),'1');
//静态方法
call_user_func(array('a','b'),'1');
call_user_func('a::b','1');
?>
详解:
call_user_func('方法名','方法转入的值'......):普通方法
call_user_func(array(类名,方法名),方法传入的值):类的方法 php<5.3
call_user_func(array(对象,方法名),方法传入的值):类的方法 php>=5.3
call_user_func(array(类名,方法名),方法传入的值):类的静态方法
call_user_func('类名::方法名',方法传入的值):类的静态方法
2.call_user_func_array:
普通函数和类的方法
<?php
function a($i,$m)
{
echo $i;
echo $m;
}
call_user_func_array('a',array('1','2'));
//结果 1 2
?>
<?php
Class a
{
function b($i, $m) {
echo $i;
echo $m;
}
public static c($i, $m) {
echo $i;
echo $m;
}
}
//php<5.3时,非静态的方法可直接传入类名
call_user_func_array(array('a', 'b'), array("1", "2"));
//php>=5.3时,非静态的方法 只有在类被实例化后方可调用,否则会提示Strict性错误
$obj = new a;
call_user_func_array(array($obj, 'b'), array("1", "2"));
//静态方法调用如下
call_user_func_array(array('a','c'), array("1", "2"));
//或
call_user_func_array('a::c', array("1", "2"));
?>
注意:这两个都是支持引用的
<?php
function a(&$i) {
$i=$i+2;
}
$c = 0;
call_user_func('a', &$c);
echo $c;
//结果 2
call_user_func_array('a', array(&$c));
echo $c;
//结果 4
?>