0

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

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
}

Wich 不起作用,因为get_arg_name();它是纯虚构func_get_args();的,它返回实际参数,而不是原型中定义的参数。

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

4

2 回答 2

3

只有反射。一些例子:

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
        )

)
于 2012-06-14T15:38:25.370 回答
1

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

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

请阅读更多关于如何使用它的信息。

于 2012-06-14T15:37:15.387 回答