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这三个函数不能直接作为函数的参数。
注: 因为本函数依赖于当前域来决定参数细节,因此不能用作函数参数。如果必须要传递这个值,将结果赋给一个变量,然后传递该变量。