检查所有函数参数

时间:2012-06-14 15:30:08

标签: php

我一直想知道如何以干净简洁的方式在任何功能中有效地检查我的所有参数。 我想出来了:

function fooBar($myArg, $mySecondArg, $myOptionnalArg = "defaultValue"){
    if(!isset($myArg, $mySecondArg, $myOptionnalArg){
        die(__FUNCTION__ . ":missing parameter");
    }

    if(empty($myArg, $mySecondArg, $myOptionnalArg){
        die(__FUNCTION__ . ":empty parameter");
    }
    //Do stuff
}

我正在寻找的更像是:

function fooBar($myArg, $mySecondArg, $myOptionnalArg = "defaultValue"){
    $argArray = func_get_args();
    foreach($argArray as $a){
        if(empty($a)){
            die(__FUNCTION__.":".get_arg_name($a)."is empty");
        }        
        if(!isset($a)){
            die(__FUNCTION__.":".get_arg_name($a)."is unset");
        }    
    }
    //Do stuff
}

由于get_arg_name();是纯粹的虚构,而func_get_args();返回的是实际参数,而不是原型中定义的参数,因此无效。

有人可以给我一个暗示吗?任何其他良好/干净的方式来实现这一点也是受欢迎的。 感谢

2 个答案:

答案 0 :(得分:3)

仅限reflection。一些例子:

function test($a, $b, $c) {
  $function = new ReflectionFunction(__FUNCTION__);
  $parameters = $function->getParameters();

  print_r($parameters);
}

test(0, 1, 2);

你会看到这样的事情:

Array
(
    [0] => ReflectionParameter Object
        (
            [name] => a
        )

    [1] => ReflectionParameter Object
        (
            [name] => b
        )

    [2] => ReflectionParameter Object
        (
            [name] => c
        )

)

答案 1 :(得分:1)

使用php反射可以得到你需要的东西:

http://php.net/manual/en/book.reflection.php

请详细了解如何使用它。