处理无序参数(params)

时间:2014-07-08 11:36:59

标签: php function parameters arguments

处理函数中的参数(或参数)的最佳方法是准确地知道函数在有序列表中需要什么(参见func_get_args()),以获得相应的变量(语言环境范围)和值

如果你知道你需要什么作为函数内部的输入,但你不知道你会得到什么? (有多少参数?什么顺序?什么类型?)

我认为可能有不同的方法可以做到这一点,我发现自己有以下代码行:

function myvars() {
    $vars = array( "firstname" => "string", "lastname" => "string", "age" => "int", "alive" => "bool" );
    $args = func_get_args();
    foreach ($args as $arg) {
        foreach($vars as $var => $type) {
            if (preg_match('/^' . $type . '/i', gettype($arg))) {
                $$var = $arg;
                unset($vars[$var]);
                break;
            }
        }
    }
    var_dump($firstname);
    var_dump($lastname);
    var_dump($age);
    var_dump($alive);
}

myvars(31, "Mark", true, "Green");

我会批评其他代码片段来解决这个问题。

1 个答案:

答案 0 :(得分:0)

  

有两次我被问到,#34;祈祷,巴贝奇先生,如果你放了   进入机器错误的数字,正确的答案会出来吗?" ...   我无法正确理解那种想法的混乱   可能会引发这样的问题。

     

-Charles Babbage,来自哲学家生活的段落

函数签名和声明正是为了在代码的两个不同部分之间建立接口或契约。为什么你会在没有任何规范的情况下声明一个函数?为什么你会在不知道你正在做什么的情况下调用该函数以及为什么你仍然希望得到一个合理的结果呢?

让您的函数按名称声明其参数,或者至少接受带有命名键的数组或对象。在不构建代码的情况下,您无法获得代码结构。您的示例代码是非确定性的,因为您获得了两个字符串,并且无法将它们彼此区分开来。我们无法保证您可以使此功能始终产生正确的输出。