php中函数和方法的调用

酒贱常愁客少,月明多被云妨.

函数调用

第一种调用方式:

1
2
3
4
5
function test() {
echo 'test';
}

test();

第二种调用方式:

1
2
3
4
5
function test() {
echo 'test';
}

call_user_func('test');

参数传递:

1
2
3
4
5
6
function test($a, $b) {
echo $a;
echo $b;
}

call_user_func_array ('test', [1, 'ff']);

不定参数:

1
2
3
4
5
6
function oldAdd() {
$args = func_get_args();
dd($args);
}

oldAdd('1', '2', '3');

或者

1
2
3
4
5
6
function test() {
$args = func_get_args();
dd($args);
}

call_user_func_array ('test', [1, 'ff']);

方法调用

第一种方法:

1
2
3
4
5
6
7
8
9
class Test
{
public function hehe()
{
echo 'hehe';
}
}

(new Test())->hehe();

第二种方法:

1
2
3
4
5
6
7
8
9
10
class Test
{
public function hehe()
{
echo 'hehe';
}
}

$f = new Test();
call_user_func([ $f, 'hehe']);

静态方法:

1
2
3
4
5
6
7
8
9
class Test
{
public static function hehe($a, $b)
{
echo $a;
}
}

call_user_func_array([ 'Test', 'hehe'], ['we', 34]);

普通方法传递参数:

1
2
3
4
5
6
7
8
9
10
class Test
{
public function hehe($a, $b)
{
echo $a;
}
}

$f = new Test();
call_user_func_array([ $f, 'hehe'], ['we', 34]);

类内部的方法调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Test
{
public function hehe($a, $b)
{
call_user_func([$this, 'init']);
echo $a;
}

public function init()
{
echo '--init--';
}
}

$f = new Test();
call_user_func_array([ $f, 'hehe'], ['we', 34]);

两种调用的区别

call_user_func is for calling functions whose name you don’t know ahead of time but it is much less efficient since the program has to lookup the function at runtime.