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这三个函数不能直接作为函数的参数。

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



上一篇: PHP技巧总结
下一篇: PHP中include与include_once加载文件性能测试
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: php
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1912
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑