PHP中func_get_args的用法

PHP中func_get_args的用法

1.函数的动态参数

<?php

$cacheServerConfig = array('host' => 'localhost', 'port' => 11211);

function getCacheObj() {

$a = func_get_args();

var_dump($a);

if (is_array($a[0])) {

$cacheServerConfig = $a[0];

} else {

$cacheServerConfig = $GLOBALS['cacheServerConfig'];

}

if (!is_array($cacheServerConfig)) {

die("Parameter \$cacheServerConfig must be an array!");

}

if (is_array($a[0])) {

array_shift($a);

}

var_dump($a);

Util::loadLib('cache/Cache.class');

$cache = Cache::factory($cacheServerConfig, $a[0], $a[1], $a[2], $a[3], $a[4]);

return $cache;

}

getCacheObj($cacheServerConfig, '1616', 'hao123');

getCacheObj('a', 'b', 'c');

?>

输出如下:

array(3) {

[0]=>

array(2) {

["host"]=>

string(9) "localhost"

["port"]=>

int(11211)

}

[1]=>

string(4) "1616"

[2]=>

string(6) "hao123"

}

array(2) {

[0]=>

string(4) "1616"

[1]=>

string(6) "hao123"

}

array(3) {

[0]=>

string(1) "a"

[1]=>

string(1) "b"

[2]=>

string(1) "c"

}

array(3) {

[0]=>

string(1) "a"

[1]=>

string(1) "b"

[2]=>

string(1) "c"

}

测试一主要演示的是PHP中函数动态参数的用法,函数定义的时候是没有任何参数的,调用的时候想传什么参数就传什么参数,想传多少参数就传多少参数,完全由你自己来控制。

2.函数的默认参数

function testArgs($type = 'memcached') {

$numargs = func_num_args();

echo "Number of arguments: $numargs\n";

echo "type: $type\n";

$a = func_get_args();

var_dump($a);

}

testArgs();

testArgs('kt');

输出如下:

Number of arguments: 0

type: memcached

array(0) {

}

Number of arguments: 1

type: kt

array(1) {

[0]=>

string(2) "kt"

}

从以上的输出可以说明一个问题,当函数有默认参数,且在调用时不传递此参数时,函数func_get_args里面是不包含默认参数的,但是直接输出此参数时是有值的。

3.注意问题

func_get_arg, func_get_args, func_num_args这三个函数不能直接作为函数的参数。

注: 因为本函数依赖于当前域来决定参数细节,因此不能用作函数参数。如果必须要传递这个值,将结果赋给一个变量,然后传递该变量。