PHP call-user-func() call-user-func-array() 以及实现伪重载

(网址安全问题,请自行将方法中-替换为_)

在discuz代码和CodeIgniter等框架中经常看到这两个函数,今天查了下资料看了下这两个函数。

这两个函数主要是对函数的动态调用,下面是几个例子:

 

1、call-user-func()使用,第一个参数是方法名,后面的参数就是调用函数的参数。

call-user-func('test', 'a', 'b');
function test($a, $b){
	echo 'a=', $a;
	echo '<br>';
	echo 'b=', $b;
}

call-user-func()也可以调用内部方法,但是方法需要时静态的:

call-user-func(array('TestClass','test'), '1');
class TestClass{
	static function test($a){
		echo 'a=', $a;
	}
}

2、call-user-func-array()和call-user-func()的用法类似,只是可以传array参数:

call-user-func-array('array_test', array('a', 'b'));
function array_test($a, $b){
	echo "a=", $a;
	echo "b=", $b;
}

3、利用call-user-func-array()函数实现php中的伪重载:

// 动态调用,伪重载
otest('a');
otest('a', 'b');
otest('a', 'b', 'c');
function otest1($a){
	echo "我是test1", '<br>';
}
function otest2($a, $b){
	echo "我是test2", '<br>';
}
function otest3($a, $b, $c){
	echo "我是test3", '<br>';
}
function otest(){
	$args = func_get_args();
	$num = func_num_args();
	call-user-func-array('otest'.$num, $args);
}

 

发表评论